Lỗi: EACCES: quyền bị từ chối


99

Tôi chạy npm install lodash nhưng nó báo Lỗi: EACCES: lỗi bị từ chối quyền . Tôi biết đó là vấn đề về quyền nhưng theo tôi biết, quyền sudo là không cần thiết để cài đặt cục bộ mô-đun nút. Nếu tôi chạy nó với sudo, nó sẽ được cài đặt bên trong thư mục ~ / node_modules. drwxrwxr-x là quyền tệp của thư mục hiện có. Tôi không thể tìm ra những gì có thể đã xảy ra sai.

Dưới đây là thông báo lỗi.

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log

là chủ sở hữu của thư mục node_modulesgốc?
AJS

thư mục node_module chưa được tạo bên trong thư mục mà tôi định cài đặt lodash.
xruptronics

bạn đã chạy npm install trong thư mục / home / rupesh / của bạn hay một số thư mục khác?
AJS

con đường của thư mục trong đó tôi chạy NPM cài đặt là ~ / Desktop / es6
xruptronics

whats sản lượng ls -l ~/Desktop | grep es6chắc chắn rằng bạn là chủ sở hữu của thư mục es6
AJS

Câu trả lời:


79

Lệnh này khắc phục sự cố. Nó đã làm việc cho tôi:

sudo npm install -g --unsafe-perm=true --allow-root

Đối với bất kỳ ai như tôi, mặc dù lệnh này dường như đã hoạt động tại thời điểm viết bài, nhưng đối với Node, v10.10.0tôi đã gặp lỗi sau: "npm ERR! Không thể cài đặt / var / www / project: Thiếu tên gói"
Wayne Smallman

1
Các cờ --unsafe-perm = true --allow-root phù hợp với chúng tôi bằng cách sử dụng nút v10.15.0 để cài đặt với tư cách là người dùng root một ứng dụng hiện có mà nút-sass sẽ không cài đặt. Chính xác chỉ huy chúng tôi sử dụng để có được nút-sass cài đặt để node_modules thư mục nội bộ thư mục đã được # NPM cài đặt --save-dev --unsafe-perm = node-sass đúng --allow-root @ mới nhất
Peter Edwards

Bạn có thể sử dụng root để giải quyết vấn đề (mặc dù điều này không được khuyến khích).
Chris Marotta

Tôi đã có thể làm cho nó hoạt động bằng cách sử dụng các cờ đó nên thực sự câu trả lời là: sudo npm install -g --unsafe-perm = true --allow-root <package-name> @ <version-name>
Frank Hu MSFT

46

Tôi gặp vấn đề tương tự với cài đặt máy chủ webpack trên toàn cầu, Sử dụng các bước từ Url này Đã giải quyết vấn đề của tôi, công việc của tôi là giúp bạn.

Các bước đã đề cập ở trên Ở đó: Sao lưu máy tính của bạn trước khi khởi động.

Tạo một thư mục cho các cài đặt toàn cầu:

1. mkdir ~/.npm-global

Định cấu hình npm để sử dụng đường dẫn thư mục mới:

2.npm config set prefix '~/.npm-global'

Mở hoặc tạo tệp ~ / .profile và thêm dòng này:

3.export PATH=~/.npm-global/bin:$PATH

Quay lại dòng lệnh, cập nhật các biến hệ thống của bạn:

4.source ~/.profile

Kiểm tra: Tải xuống một gói trên toàn cầu mà không sử dụng sudo.

npm install -g jshint

Thay vì các bước 2-4, bạn có thể sử dụng biến ENV tương ứng (ví dụ: nếu bạn không muốn sửa đổi ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

1
đã làm việc trên Mojave. Rất cảm ơn sau 4-5 giờ khắc phục sự cố, điều này đã thành công!
Johnny

11

Việc tạo package.json bằng npm init đã giải quyết được vấn đề của tôi.


Nhưng tôi không chắc tại sao tệp package.json được yêu cầu trong khi cài đặt mô-đun nút dưới dạng tệp package.json không được cập nhật hoặc được sử dụng trong trường hợp của tôi vì tôi chưa sử dụng --save hoặc --save-dev hoặc lệnh tương tự.
xruptronics

điều này thật kỳ lạ. Tôi nghĩ rằng một số thứ đã bị xáo trộn trong cuộc trò chuyện npm của bạn và thực hiện init đặt lại nó, dù sao thì nó sẽ là một bí ẩn mãi mãi vì tôi không thể tìm thấy một tham chiếu nào đến một vấn đề tương tự ở nơi khác.
AJS

Gặp sự cố tương tự với npm 6.9.0 và điều này cũng hiệu quả với tôi.
Chris Marotta

11

Tôi đã gặp sự cố trên Linux. tôi đã viết

chown -R myUserName ./* 

trong thư mục dự án của tôi.


7
Rất không được khuyến khích. Điều đó chạm vào tất cả các thư mục của bạn và xóa quyền root trên bất kỳ thư mục nào trong số đó. Nếu một số thứ cần được đặt làm root, điều này sẽ phá hủy cấu hình hiện tại của bạn.
Patrick Da Silva

8

Từ những gì tôi có thể thấy trong nhật ký của bạn mà bạn đã đăng:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

thư mục /home/rupesh/node_modules/không có quyền cần thiết để tạo thư mục, vì vậy chạy chown -r rupesh:rupesh /home/rupesh/node_modules/điều này sẽ giải quyết nó.


Làm chown -R rupesh: rupesh / home / rupesh / node_modules / và chạy npm install lodash lại được cài đặt lodash bên trong thư mục ~ / node_module.
xruptronics

vâng, tôi biết bạn nên tạo dự án trong thư mục chính của bạn hơn là Máy tính để bàn. npm vì một lý do nào đó đang cài đặt các mô-đun của bạn vào /home/rupesh/node_modules. Bất kỳ cách nào làm việc trong thư mục chính của bạn nên là lý tưởng nào
AJS

Tôi nghĩ ~ / Projects / es6 tương đương với cấu trúc ~ / Desktop / es6. Điều tôi gặp khó khăn khi tìm hiểu là tại sao node_modules không được tạo bên trong thư mục es6 và tại sao mô-đun lodash (hoặc bất cứ thứ gì) không được cài đặt bên trong đó. Tôi đã không phải đối mặt với vấn đề này sớm hơn nhưng hôm nay có gì sai, đó là điều tôi muốn tìm hiểu.
xruptronics

vâng, tôi đã đọc hai bình luận trước đó của mình và nhận ra sự ngu ngốc :), tôi đã nhìn xung quanh và không tìm thấy ai khác có cùng vấn đề. Mã của bạn có thể tìm thấy loadashmô-đun không?
AJS

7

Nó không có quyền ghi cho others (rx). Hãy thử với

chmod a+w <folder>

và lặp lại.


2
Không chown-rtùy chọn để ngăn việc phải sử dụng nó trên mỗi và mọi thư mục trong node_modules?
DrakaSAN

@Juanjo Salvador Nó không hoạt động, nó vẫn xảy ra lỗi tương tự.
xruptronics

@DrakaSAN vâng, chown có tùy chọn đệ quy.
Juanjo Salvador

6

Điều này đã giải quyết vấn đề của tôi ngay lập tức - mac Mojave 10.14.6 - PhpStorm.

Lỗi từ chối chưa được xử lý: EACCES: quyền bị từ chối, mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

Bài gốc: https://stackoverflow.com/a/50639828


4

FWIW Tôi có các triệu chứng tương tự, nhưng với một gói khác. Tạo package.jsonvà chạy npm initđã KHÔNG giải quyết vấn đề của tôi.

Trên hệ thống này, có vẻ như các thư mục mới ở vị trí này đã được tạo với quyền root. Suốt trongnpm install , các thư mục mới được tạo Điều này khiến cho quá trình cài đặt npm không thành công, ngay cả với sudo.

Giải pháp là chạy npm install appở một vị trí khác mà không có umask gốc.


4

Cố gắng cấp tất cả quyền cho thư mục dự án của bạn bằng lệnh dưới đây

sudo chmod -R 777 /yourProjectDirectoryName

chạy với

sudo npm install lodash

Đó là một giải pháp jr
Pablo Papalardo

Bạn thậm chí có thể không cần 777. Đối với tôi, vấn đề chỉ là số # quá thấp. (775 đã sửa nó.)
Andrew

"Đặt 777 quyền cho một tệp hoặc thư mục có nghĩa là tất cả người dùng sẽ có thể đọc, ghi và thực thi được và có thể gây ra rủi ro bảo mật rất lớn." - linuxize.com/post/what-does-chmod-777-mean
MillerC

4

Một vấn đề liên quan:

Lãng phí 3 giờ trong vài ngày.

Trên máy AWS EC2, bên dưới đã hoạt động:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

Hy vọng rằng sẽ giúp.


3

Tôi đã giải quyết vấn đề này bằng cách thay đổi quyền của thư mục npm của mình. Tôi đã truy cập thư mục toàn cầu npm cho tôi, nó ở

/home/<user-name>

Tôi đã đi đến thư mục này bằng cách nhập lệnh này

cd /home/<user-name>

và sau đó thay đổi quyền của thư mục .npm bằng cách nhập lệnh này.

sudo chmod -R 777 ".npm"

Nó hoạt động như một cái duyên đối với tôi. Nhưng có một lỗ hổng bảo mật với điều này tức là thư mục gói toàn cầu của bạn có thể truy cập được ở tất cả các cấp.


Tại sao bạn lại cho phép cả thế giới truy cập vào thư mục cụ thể này?
egdavid, 27/07/19

2

Đầu tiên hãy cài đặt mà không có -g (global) trên root. Sau khi thử sử dụng -g (toàn cầu) Nó đã làm việc cho tôi.


Đã làm việc!! Trên Mac đã chuyển thư mục mã của tôi vào thư mục gốc: HardDrive / và "npm install" chạy hoàn hảo. Sau đó, tôi chuyển thư mục mã của mình trở lại nơi tôi muốn bên trong HardDrive / users / myUserName / Projects / code, chạy lại "npm install" và lần này, nó hoạt động.
Josh

2

LUBUNTU 19.10 / Vấn đề tương tự đang chạy: $npm start

kết xuất: Lỗi: EACCES: quyền bị từ chối, mở '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' tại Object. fs.openSync (fs.js: 646: 18) tại Object.fs.writeFileSync (fs.js: 1299: 33) tại save (/ home / simon / xxx / pagebuilder / resources / scripts / register / node_modules / @ babel / register / lib / cache.js: 52: 15) tại _combinedTickCallback (internal / process / next_tick.js: 132: 7) tại process._tickCallback (internal / process / next_tick.js: 181: 9) tại Function.Module.runMain (module.js: 696: 11) tại Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) tại Module._compile (module.js: 653: 30) tại Đối tượng .Module._extensions..js (module.js: 664: 10) tại Module.load (module.js: 566: 32)

Có vẻ như người dùng (quản trị viên) mặc định của tôi không có quyền trên các thư mục mô-đun nút.

CÁi này đã sửa nó giúp tôi!

$ sudo chmod a+w node_modules -R ## from project root


2

Hãy thử sử dụng cách này: Trên dòng lệnh, trong thư mục chính của bạn, hãy tạo một thư mục cho các cài đặt chung:

mkdir ~/.npm-global

Định cấu hình npm để sử dụng đường dẫn thư mục mới:

npm config set prefix '~/.npm-global'

Trong trình soạn thảo văn bản ưa thích của bạn, hãy mở hoặc tạo tệp ~ / .profile và thêm dòng này:

export PATH=~/.npm-global/bin:$PATH

Trên dòng lệnh, cập nhật các biến hệ thống của bạn:

source ~/.profile

Thử nghiệm cài đặt gói trên toàn cầu mà không cần sử dụng sudo, Hy vọng nó sẽ hữu ích


1

Đây là giải pháp cho người dùng GNU / Linux (Debian) (Thay USERNAME bằng tên người dùng của bạn ):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config

0

Loại bỏ thư mục dist và điều này giải quyết vấn đề của tôi !!


0

Trên Windows, kết quả là cổng đã được IIS sử dụng.

Dừng IIS (Nhấp chuột phải, Thoát), đã giải quyết được sự cố.


0

Chỉ cần thay đổi chủ sở hữu của node_modulesthư mục chung thành người dùng của bạn:

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules

0

Tôi đã thử hầu hết các đề xuất này nhưng không có đề xuất nào hoạt động. Sau đó, tôi chạy npm clean-installvà nó giải quyết các vấn đề của tôi.


0

nút khuyến nghị thực hiện sau:

 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config

Nếu bạn thực hiện

npm config

Bạn sẽ thấy một cái gì đó như thế này

                   npm update check failed                   
             Try running with sudo or get access             
            to the local update config store via             
 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config 

Nó đã làm việc cho tôi.


-3

Thực hiện các lệnh này và vấn đề sẽ được giải quyết!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules

Đối với /usr/localvà tất cả các thứ tự con, các quyền phải được rwxr-xr-xroot và sở hữu. Người dùng hệ thống có thể đọc và thực thi trong cấu trúc dir này, nhưng không thể chỉnh sửa, tạo tệp. Điều đó đang được nói, câu trả lời của bạn đề xuất cấp quyền cho mọi người. Và, không mô tả cách thức và điều gì sẽ bị ảnh hưởng, hoặc tại sao vấn đề sẽ được giải quyết.
Kuliraj
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.