ข้อผิดพลาด: EACCES: การอนุญาตถูกปฏิเสธ


106

ฉันเรียกใช้npm install lodashแต่มันแสดงข้อผิดพลาด: EACCES:ข้อผิดพลาดที่ปฏิเสธการอนุญาต ฉันรู้ว่ามันเป็นปัญหาการอนุญาต แต่เท่าที่ฉันรู้ไม่จำเป็นต้องมีสิทธิ์ sudo สำหรับการติดตั้งโมดูลโหนดในเครื่อง ถ้าฉันรันด้วย sudo มันจะถูกติดตั้งภายในโฟลเดอร์ ~ / node_modules drwxrwxr-xเป็นการอนุญาตไฟล์ของโฟลเดอร์ที่มีอยู่ ฉันคิดไม่ออกว่าจะเกิดอะไรขึ้น

ด้านล่างนี้คือข้อความแสดงข้อผิดพลาด

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

เป็นเจ้าของโฟลเดอร์node_modulesroot หรือไม่?
AJS

โฟลเดอร์ node_module ยังไม่ถูกสร้างขึ้นภายในโฟลเดอร์ที่ฉันตั้งใจจะติดตั้ง lodash
xruptronics

คุณรันการติดตั้ง npm ในไดเร็กทอรี / home / rupesh / หรือไดเร็กทอรีอื่น ๆ หรือไม่
AJS

เส้นทางของโฟลเดอร์ที่ฉันเรียกใช้การติดตั้ง npm คือ ~ / Desktop / es6
xruptronics

ผลลัพธ์ของการls -l ~/Desktop | grep es6ตรวจสอบให้แน่ใจว่าคุณเป็นเจ้าของไดเรกทอรี es6 คืออะไร
AJS

คำตอบ:


86

คำสั่งนี้แก้ไขปัญหา มันได้ผลสำหรับฉัน:

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

สำหรับใครก็ตามที่ชอบตัวเองแม้ว่าคำสั่งนี้จะใช้งานได้ในขณะที่เขียนสำหรับ Node v10.10.0ฉันได้รับข้อผิดพลาดต่อไปนี้: "npm ERR! can't install / var / www / project: Missing package name"
Wayne Smallman

1
แฟล็ก --unsafe-perm = true --allow-root ทำงานให้เราโดยใช้โหนด v10.15.0 เพื่อติดตั้งเป็นรูทของผู้ใช้แอปพลิเคชันที่มีอยู่โดยที่ node-sass จะไม่ติดตั้ง คำสั่งที่แน่นอนที่เราใช้ในการติดตั้ง node-sass ลงในโฟลเดอร์ node_modules ไดเร็กทอรีท้องถิ่นคือ # npm install --save-dev --unsafe-perm = true --allow-root node-sass @ latest
Peter Edwards

คุณสามารถใช้ root เพื่อแก้ปัญหาได้ (แม้ว่าจะไม่แนะนำให้ทำเช่นนี้)
Chris Marotta

ฉันสามารถทำให้มันทำงานได้โดยใช้แฟล็กเหล่านั้นดังนั้นคำตอบจริงๆคือ sudo npm install -g --unsafe-perm = true --allow-root <package-name> @ <version-name>
Frank Hu MSFT

48

ฉันมีปัญหาเดียวกันกับการติดตั้งเซิร์ฟเวอร์ webpack ทั่วโลกใช้ขั้นตอนจากURL นี้แก้ไขปัญหาของฉันฉันจะทำงานให้คุณ

ขั้นตอนที่กล่าวถึงข้างต้นมี: สำรองข้อมูลคอมพิวเตอร์ของคุณก่อนที่จะเริ่ม

สร้างไดเร็กทอรีสำหรับการติดตั้งส่วนกลาง:

1. mkdir ~/.npm-global

กำหนดค่า npm เพื่อใช้เส้นทางไดเร็กทอรีใหม่:

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

เปิดหรือสร้างไฟล์ ~ / .profile และเพิ่มบรรทัดนี้:

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

กลับไปที่บรรทัดคำสั่งอัปเดตตัวแปรระบบของคุณ:

4.source ~/.profile

ทดสอบ: ดาวน์โหลดแพ็คเกจทั่วโลกโดยไม่ต้องใช้ sudo

npm install -g jshint

แทนที่จะใช้ขั้นตอนที่ 2-4 คุณสามารถใช้ตัวแปร ENV ที่เกี่ยวข้อง (เช่นหากคุณไม่ต้องการแก้ไข ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

1
ทำงานกับโมฮาวี ขอบคุณมากหลังจาก 4-5 ชั่วโมงของการแก้ปัญหานี่เป็นเคล็ดลับ!
Johnny

13

ฉันมีปัญหากับ Linux ฉันเขียน

chown -R myUserName ./* 

ในโฟลเดอร์โครงการของฉัน


8
ไม่แนะนำมาก ที่สัมผัสกับไดเรกทอรีทั้งหมดของคุณและลบสิทธิ์รูทในใด ๆ หากจำเป็นต้องตั้งค่าบางอย่างเป็นรูทสิ่งนี้จะทำลายการกำหนดค่าปัจจุบันของคุณ
Patrick Da Silva

ฉันเห็นด้วย @PatrickDaSilva เรื่องนี้ทำให้เซิร์ฟเวอร์ทั้งหมดของฉันสับสน ..
Simon Degn

12

การสร้างpackage.jsonโดยใช้npm initช่วยแก้ปัญหาของฉันได้


แต่ฉันไม่แน่ใจว่าทำไมต้องใช้ไฟล์ package.json ในขณะที่ติดตั้งโมดูลโหนดเนื่องจากไฟล์ package.json ไม่ได้รับการอัปเดตหรือใช้ในกรณีของฉันเพราะฉันไม่ได้ใช้ --save หรือ --save-dev หรือคำสั่งที่คล้ายกัน
xruptronics

นี่เป็นเรื่องแปลก ฉันคิดว่ามีบางอย่างสับสนใน npm conf ของคุณและทำการ init รีเซ็ตอย่างไรก็ตามมันควรจะเป็นปริศนาตลอดไปเพราะฉันไม่พบข้อมูลอ้างอิงเดียวถึงปัญหาที่คล้ายกันที่อื่น
AJS

มีปัญหาคล้ายกันกับ npm 6.9.0 และสิ่งนี้ก็ใช้ได้ผลสำหรับฉันเช่นกัน
Chris Marotta

8

จากสิ่งที่ฉันเห็นในบันทึกของคุณที่คุณโพสต์:

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',

ไดเร็กทอรี/home/rupesh/node_modules/ไม่มีสิทธิ์ที่จำเป็นในการสร้างไดเร็กทอรีดังนั้นการรันchown -r rupesh:rupesh /home/rupesh/node_modules/สิ่งนี้ควรแก้ได้


ทำ chown -R rupesh: rupesh / home / rupesh / node_modules / และรัน npm install lodash อีกครั้งติดตั้ง lodash ภายในโฟลเดอร์ ~ / node_module แต่คราวนี้มันไม่เกิดข้อผิดพลาด แต่มันไม่ใช่ที่ที่ฉันตั้งใจจะติดตั้ง
xruptronics

ใช่ฉันรู้ว่าคุณควรสร้างโครงการในโฮมไดเร็กทอรีของคุณแทนที่จะเป็นเดสก์ท็อป npm ด้วยเหตุผลบางประการคือการติดตั้งโมดูลของคุณ/home/rupesh/node_modulesด้วยเหตุผลบางประการ วิธีการทำงานในโฮมไดเร็กทอรีของคุณก็ควรจะดีที่สุด
AJS

ฉันคิดว่า ~ / Projects / es6 เทียบเท่ากับโครงสร้าง ~ / เดสก์ท็อป / es6 ที่ชาญฉลาดสิ่งที่ฉันมีปัญหาในการหาสาเหตุคือสาเหตุที่ node_modules ไม่ถูกสร้างขึ้นภายในโฟลเดอร์ es6 และเหตุใดโมดูล lodash (หรืออะไรก็ตาม) จึงไม่ได้รับการติดตั้งภายในนั้น ฉันไม่ได้เผชิญกับปัญหานี้มาก่อน แต่เกิดข้อผิดพลาดในวันนี้นั่นคือสิ่งที่ฉันต้องการหา
xruptronics

ใช่ฉันอ่านสองความคิดเห็นก่อนหน้าของฉันและตระหนักถึงความโง่เขลา :) ฉันมองไปรอบ ๆ และไม่พบใครที่มีปัญหาเดียวกัน รหัสของคุณสามารถค้นหาloadashโมดูลได้หรือไม่?
AJS

7

ไม่มีสิทธิ์เขียนสำหรับothers(rx) ลองด้วย

chmod a+w <folder>

และทำซ้ำ


2
ไม่ได้chownมี-rตัวเลือกในการป้องกันไม่ให้มีการใช้งานในแต่ละและทุกโฟลเดอร์ในnode_modules?
DrakaSAN

@Juanjo Salvador มันใช้ไม่ได้มันแสดงข้อผิดพลาดเดียวกัน
xruptronics

@DrakaSAN ใช่ chown มีตัวเลือกแบบเรียกซ้ำ
Juanjo Salvador

7

สิ่งนี้ช่วยแก้ปัญหาของฉันได้ทันที - mac Mojave 10.14.6 - PhpStorm

ข้อผิดพลาดในการปฏิเสธที่ไม่สามารถจัดการได้: EACCES: การอนุญาตถูกปฏิเสธ mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

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

โพสต์ต้นฉบับ: https://stackoverflow.com/a/50639828


6

พยายามให้สิทธิ์ทั้งหมดในโฟลเดอร์โครงการของคุณด้วยคำสั่งด้านล่าง

sudo chmod -R 777 /yourProjectDirectoryName

ทำงานด้วย

sudo npm install lodash

เป็นวิธีการแก้ปัญหาของจูเนียร์
Pablo Papalardo

คุณอาจไม่ต้องการ 777 ด้วยซ้ำสำหรับฉันปัญหาก็แค่ค่า # ต่ำเกินไป (775 แก้ไขแล้ว)
Andrew

"การตั้งค่าสิทธิ์ 777 ให้กับไฟล์หรือไดเร็กทอรีหมายความว่าผู้ใช้ทุกคนจะสามารถอ่านเขียนและปฏิบัติการได้และอาจก่อให้เกิดความเสี่ยงด้านความปลอดภัยอย่างมาก" - linuxize.com/post/what-does-chmod-777-mean
MillerC

4

FWIW ฉันมีอาการเดียวกัน แต่มีแพ็คเกจที่แตกต่างกัน การสร้างpackage.jsonและใช้งานnpm initไม่ไม่ได้แก้ปัญหาของฉัน

ในระบบนี้เห็นได้ชัดว่ามีการสร้างโฟลเดอร์ใหม่ในตำแหน่งนี้ด้วยสิทธิ์ระดับรูท ระหว่างnpm installนั้นจะมีการสร้างโฟลเดอร์ใหม่ สิ่งนี้ทำให้การติดตั้ง npm ล้มเหลวระหว่างทางแม้จะใช้ sudo

วิธีแก้ปัญหาคือการรันnpm install appในตำแหน่งอื่นโดยไม่มีรูท umask


4

ปัญหาที่เกี่ยวข้อง:

เสียเวลาไป 3 ชั่วโมงหลายวัน

บนเครื่อง AWS EC2 ทำงานด้านล่าง:

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

หวังว่าจะช่วยได้


3

ฉันแก้ไขปัญหานี้โดยเปลี่ยนสิทธิ์ของไดเรกทอรี npm ของฉัน ฉันไปที่ไดเรกทอรีทั่วโลก npm สำหรับฉันแล้วที่

/home/<user-name>

ฉันไปที่ไดเร็กทอรีนี้โดยป้อนคำสั่งนี้

cd /home/<user-name>

จากนั้นเปลี่ยนสิทธิ์ของโฟลเดอร์. npm โดยป้อนคำสั่งนี้

sudo chmod -R 777 ".npm"

มันเป็นเสน่ห์สำหรับฉัน แต่มีข้อบกพร่องด้านความปลอดภัยเช่นนี้คือไดเรกทอรีแพ็คเกจส่วนกลางของคุณสามารถเข้าถึงได้ทุกระดับ


ทำไมคุณถึงยอมให้คนทั้งโลกเข้าถึงโฟลเดอร์นี้
egdavid

2

ติดตั้งครั้งแรกโดยไม่มี -g (global) บนรูท หลังจากลองใช้ -g (global) มันได้ผลสำหรับฉัน


ทำงานแล้ว !! บน Mac ย้ายโฟลเดอร์รหัสของฉันไปยังโฟลเดอร์รากของฉัน: HardDrive / และ "npm install" ทำงานได้อย่างไม่มีที่ติ จากนั้นฉันย้ายโฟลเดอร์รหัสของฉันกลับไปที่ที่ฉันต้องการภายใน HardDrive / users / myUserName / Projects / code เรียกใช้ "npm install" อีกครั้งและคราวนี้ก็ใช้งานได้
Josh

2

LUBUNTU 19.10 / ปัญหาเดียวกันทำงาน: $ npm start

การถ่ายโอนข้อมูล: ข้อผิดพลาด: EACCES: การอนุญาตถูกปฏิเสธเปิด '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' ที่ Object fs.openSync (fs.js: 646: 18) ที่ Object.fs.writeFileSync (fs.js: 1299: 33) ที่บันทึก (/ home / simon / xxx / pagebuilder / resources / scripts / registration / node_modules / @ babel / register / lib / cache.js: 52: 15) ที่ _combinedTickCallback (internal / process / next_tick.js: 132: 7) ที่ process._tickCallback (internal / process / next_tick.js: 181: 9) ที่ Function.Module.runMain (module.js: 696: 11) ที่ Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) ที่ Module._compile (module.js: 653: 30) ที่ Object .Module._extensions..js (module.js: 664: 10) ที่ Module.load (module.js: 566: 32)

ดูเหมือนว่าผู้ใช้เริ่มต้นของฉัน (ผู้ดูแลระบบ) ไม่มีสิทธิ์ในไดเร็กทอรีโมดูลโหนด

สิ่งนี้แก้ไขให้ฉัน!

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


2

ลองใช้สิ่งนี้: บนบรรทัดคำสั่งในโฮมไดเร็กทอรีของคุณสร้างไดเร็กทอรีสำหรับการติดตั้งส่วนกลาง:

mkdir ~/.npm-global

กำหนดค่า npm เพื่อใช้เส้นทางไดเร็กทอรีใหม่:

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

ในโปรแกรมแก้ไขข้อความที่คุณต้องการเปิดหรือสร้างไฟล์ ~ / .profile และเพิ่มบรรทัดนี้:

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

ในบรรทัดคำสั่งอัปเดตตัวแปรระบบของคุณ:

source ~/.profile

ทดสอบการติดตั้งแพ็คเกจทั่วโลกโดยไม่ต้องใช้ sudo หวังว่าจะช่วยได้


1

นี่คือวิธีแก้ปัญหาสำหรับผู้ใช้ GNU / Linux (Debian) (แทนที่USERNAMEด้วยชื่อผู้ใช้ของคุณ ):

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



0

ใน Windows พบว่ามีการใช้พอร์ต IIS อยู่แล้ว

การหยุด IIS (คลิกขวาออก) แก้ไขปัญหาได้


0

เพียงแค่เปลี่ยนเจ้าของnode_modulesไดเรกทอรีส่วนกลางเป็นผู้ใช้ของคุณ:

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

0

ฉันลองทำตามคำแนะนำเหล่านี้เกือบทั้งหมดแล้ว แต่ก็ไม่ได้ผล จากนั้นฉันก็วิ่งnpm clean-installและแก้ไขปัญหาของฉัน


0

โหนดแนะนำให้ดำเนินการดังต่อไปนี้:

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

หากคุณดำเนินการ

npm config

คุณจะเห็นอะไรแบบนี้

│                   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 │

มันได้ผลสำหรับฉัน



0

หากคุณได้รับข้อผิดพลาดดังต่อไปนี้

Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/<PackageName>/vendor'

ฉันขอแนะนำให้ใช้คำสั่งด้านล่างเพื่อติดตั้งแพ็คเกจส่วนกลางของคุณ

sudo npm install -g <PackageName> --unsafe-perm=true --allow-root

-3

ดำเนินการคำสั่งเหล่านี้และปัญหาจะได้รับการแก้ไข!

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

สำหรับ/usr/localและ subdirs สิทธิ์ทั้งหมดควรเป็นrwxr-xr-xและเป็นเจ้าของโดย root ผู้ใช้ระบบสามารถอ่านและดำเนินการภายในโครงสร้าง dir นี้ แต่ไม่สามารถแก้ไขสร้างไฟล์ได้ ดังที่กล่าวไว้คำตอบของคุณแนะนำให้อนุญาตกับทุกคน และโดยไม่ได้อธิบายว่าจะได้รับผลกระทบอย่างไรและทำไมปัญหาจึงได้รับการแก้ไข
Kuliraj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.