2015-04-06 17 views
22

Cố gắngđánh người nào một trận WARN EACCES user "root" không có quyền truy cập vào dev dir

sudo npm install protractor -g 

và lỗi khét tiếng cùng/cảnh báo một lần nữa (googled vô ích):

gyp WARN EACCES user "root" does not have permission to access the dev dir "/Users/dmitrizaitsev/.node-gyp/0.12.0" 

Điều có vẻ xảy ra là node version 0.12.0 được tải xuống và được xây dựng lại, một lần nữa và một lần nữa trong cùng một cài đặt, mặc dù là phiên bản nút hiện tại trên máy của tôi:

node -v 
v0.12.0 

Câu hỏi:

  • Thư mục "/Users/dmitrizaitsev/.node-gyp/0.12.0" thực sự là thiếu! Tại sao một thông điệp gây hiểu nhầm như vậy?

  • Tại sao thư mục này không được tạo trong suốt node v0.12.0 cũng như trong quá trình xây dựng lại thành công trước đó với node-gyp?

  • (Rõ ràng) Làm cách nào để ngăn điều này xảy ra?

Tôi chạy Mac OSX 10.8.5 nếu điều đó quan trọng.

Trả lời

33

UPDATE. Có một cách tốt hơn - thay đổi thư mục toàn cầu mặc định của npm thành thư mục con người dùng mà bạn đã có quyền chính xác, vì vậy không cần phải gây rối với quyền hoặc quyền sở hữu của tệp hệ thống ở vị trí đầu tiên.

Theo đề xuất trong https://docs.npmjs.com/getting-started/fixing-npm-permissions:

  1. Tạo một thư mục cho việc cài đặt toàn cầu:
mkdir ~/npm-global 
  1. Configure NPM để sử dụng đường dẫn thư mục mới:
npm config set prefix '~/npm-global' 
  1. Mở hoặc tạo một file ~/.profile (hoặc ~/.bash_profile vv) và thêm dòng này (ở phần cuối của tập tin):
export PATH=~/npm-global/bin:$PATH 

Xem thêm hướng dẫn của Sindre Sorhus về chủ đề: https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md


có bây giờ hình dung những gì đã sai:

Thư mục có quyền sai - đó không phải là ghi (mà sẽ là một thông báo lỗi tốt hơn so với "tiếp cận").

Và bởi vì nó không thể ghi được, nên một thư mục tạm thời được sử dụng và xóa sau mỗi lần sử dụng, đó là lý do tại sao toàn bộ quá trình tải xuống phải chạy lặp lại.

Giải pháp là để thiết lập quyền người dùng với

sudo chown -R $USER <directory> 

và không bao giờ sudo npm một lần nữa. Dường như bất cứ khi nào bạn chạy sudo npm, tất cả các thư mục con được tạo sai quyền sẽ dẫn đến các sự cố sau này.

See here for more details.

7

Hãy thử với:

sudo NPM cài đặt -g mô-đun--unsafe-perm

+1

Không, bạn không 'sudo npm' - hãy xem câu trả lời của tôi! –

+0

Cảm ơn, nó đã giải quyết được vấn đề của tôi. Tôi không thể thực hiện câu trả lời ở trên, vì một lý do nào đó. –

+0

cho tôi làm việc này. chạy npm trên root để đảm bảo nó có thể chạy như root. --unsafe-perm. Cảm ơn bạn đã sửa lỗi –

2

Đó là vì bạn không có thư mục trong thư mục này "/Users/dmitrizaitsev/.node-gyp/0.12.0".

Chỉ cần tạo một thư mục mới có tên 0.12.0 đó là số phiên bản của nút của bạn

Nó sẽ khắc phục vấn đề.

+0

2 năm sau, gặp sự cố này với nút 9.0.0 và dĩ nhiên tôi không có thư mục '/usr/local/js/node-v9.0.0/lib/node_modules/@angular/cli/ node_modules/node-sass/.node-gyp/9.0.0' vì đó là những gì kịch bản cài đặt được cho là xử lý. Đó là những gì nó là cho sau khi tất cả. Thay vào đó, tôi nhận được lỗi "không có quyền" và vòng lặp vô hạn trong khi cài đặt. Cảm giác của những năm 90. Clownish. –

+0

Vâng, 'mkdir' đã phá vỡ trình cài đặt ra khỏi vòng lặp của nó. Về vấn đề tiếp theo. –

Các vấn đề liên quan