Cài đặt Npm không thành công với không thể chạy trong wd


153

Tôi đang cố gắng thiết lập môi trường nút của mình trên phiên bản Ubuntu 12.04 mới, với Node 0.8.14 đã được cài đặt, nhưng tôi gặp vấn đề khi tôi cố chạy npm install. Vì vậy, khi tôi thử npm install, nó nói rằng tôi cần chạy nó dưới quyền root hoặc quản trị viên:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Nhưng khi thử chạy nó như sudo, nó nói như sau:

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

Trong gói.json của tôi, nó chứa các tập lệnh sau:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Phần còn lại của devdependencies là hợp lệ vì tôi đã cài đặt nó ngay trên máy của mình (Mac) Có ai có manh mối tại sao điều này xảy ra không?

Câu trả lời:


231

Các tài liệu nói (cũng ở đây ):

Nếu npm được gọi với quyền root, thì nó sẽ thay đổi uid thành tài khoản người dùng hoặc uid được chỉ định bởi usercấu hình, mặc định là nobody. Đặt unsafe-permcờ để chạy tập lệnh với quyền root.

Lựa chọn của bạn là:

  1. Chạy npm installvới --unsafe-permcờ:

    [sudo] npm install --unsafe-perm
  2. Thêm unsafe-permcờ vào package.json:

    "config": {
        "unsafe-perm":true
    }
    
  3. Không sử dụng preinstalltập lệnh để cài đặt các mô-đun toàn cầu, cài đặt riêng chúng và sau đó chạy thường xuyên npm installmà không có quyền root:

    sudo npm install -g coffee-script node-gyp
    npm install
    

Liên quan :


2
Xin lỗi tôi đã không nhìn thấy điều này cho đến bây giờ. Tôi đã thử "permafe-perm" trước đây nhưng nó cũng không hoạt động. Vấn đề vẫn còn tồn tại
EH

10
Điều này hoạt động với tôi sudo npm install --unsafe-perm:, tuy nhiên sudo npm installkhông, mặc dù tôi đã thêm "unsafe-perm":truevào pack.json ... Không chắc tại sao
Dmitry Pashkevich

8
Thêm nó vào thuộc tính "config" trong pack.json thực sự đặt "npm_package_config_unsafe_perm" để tùy chọn 2 không hoạt động. Xem: stackoverflow.com/questions/28763958/ Lời
justmoon

'không an toàn-perm': tôi cũng thất bại. Thật xấu hổ vì nó đã không đưa ra lỗi và bối cảnh (bao gồm cả thay đổi uid của nó) trong thông báo lỗi, thay vì làm mất đi nguyên nhân tồn tại và đưa ra một cái gì đó khó hiểu, đáng ngạc nhiên và thù địch.
android.weasel

Trong khi npm install --unsafe-permlàm việc cho tôi, tôi đã cố gắng làm theo hàm ý về việc thay đổi usercấu hình mặc định . Vì vậy, tôi đã làm npm set user my_usernpm set group my_group, trong đó thêm các mục tương ứng trong .npmrctập tin người dùng root . Nhưng vấn đề là node_modulesbản thân thư mục và các thư mục con của nó vẫn thuộc quyền sở hữu của root, vì vậy điều đó không có ích. Tôi không thể tìm ra bất kỳ cách nào để chúng không thuộc sở hữu của root.
Fulv

53

Điều duy nhất làm việc cho tôi là thêm một .npmrctệp chứa:

unsafe-perm = true

Thêm cấu hình tương tự để package.jsonkhông có bất kỳ hiệu ứng.


36
trong bến tàu:RUN npm set unsafe-perm true
Alexander Mills

nếu bạn đang sử dụng WSL, chỉ cần gõ set unsafe-perm true. Điều này sẽ giúp bạn
Stas Panyukov

26

Tôi đã gặp vấn đề tương tự khi cố gắng xuất bản ứng dụng nodejs của mình trong một máy chủ riêng chạy CentO bằng người dùng root. Lỗi tương tự được gây ra bởi "postinstall": "./node_modules/bower/bin/bower install" trong tệp pack.json của tôi, vì vậy giải pháp duy nhất phù hợp với tôi là sử dụng cả hai tùy chọn để tránh lỗi:

1: sử dụng tùy chọn --allow-root cho lệnh cài đặt Bower

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: sử dụng tùy chọn --unafe-perm cho lệnh cài đặt npm

npm install --unsafe-perm

12

OP ở đây, tôi đã học được nhiều hơn về nút kể từ lần đầu tiên tôi hỏi câu hỏi này. Mặc dù câu trả lời của Dmitry rất hữu ích, nhưng điều cuối cùng đã làm cho tôi là cài đặt nút với quyền chính xác.

Tôi đặc biệt khuyên bạn không nên cài đặt nút bằng bất kỳ trình quản lý gói nào, mà nên tự biên dịch nó để nó nằm trong một thư mục cục bộ có quyền bình thường.

Bài viết này cung cấp một hướng dẫn từng bước rất rõ ràng về cách làm như vậy:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ub Ubuntu-12-04


2

Tôi đã sửa lỗi này bằng cách thay đổi quyền sở hữu /usr/local~/Users/user-namenhư vậy:

sudo chown -R my_name /usr/local

Điều này cho phép tôi làm mọi thứ mà không cần sudo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.