ในการติดตั้ง npm: การปฏิเสธที่ไม่สามารถจัดการได้ข้อผิดพลาด: EACCES: การอนุญาตถูกปฏิเสธ


271

ฉันจัดการnpmติดตั้งให้เสียหายและเมื่อใดก็ตามที่ฉันพยายามติดตั้งแพ็คเกจโดยใช้npm installฉันได้รับข้อความแสดงข้อผิดพลาดตามบรรทัดเหล่านี้:

ข้อผิดพลาดในการปฏิเสธที่ไม่ได้จัดการ: EACCES: สิทธิ์ถูกปฏิเสธเปิด '/Users/marknorgate/.npm/_cacache/tmp/a449402d'

ฉันได้ลองติดตั้งโหนด & npm ใหม่อีกครั้งและพยายามย้ายแคช npm ของฉันไปที่อื่นโดยใช้คำแนะนำเหล่านี้แต่ไม่มีอะไรทำงาน

ฉันจะทำให้มันทำงานได้อย่างไร

คำตอบ:


924

กู้คืนความเป็นเจ้าของโฟลเดอร์ npm ของผู้ใช้ไปยังผู้ใช้ปัจจุบันเช่นนี้:

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

10
สิ่งนี้ใช้ได้กับฉันหลังจากที่ฉันลองอีก 4-5 สิ่งที่ไม่ได้ผล: 1) - ไม่ปลอดภัย - อนุญาต 2) อัปเกรด npm 3) เริ่มใหม่ 4) ทำงานกับ sudo ฯลฯ เป็นต้น
Alex York

2
เหมือนกับ @AlexYork สำหรับฉัน ฉันเห็นผู้ใช้และกลุ่มของฉันเป็นเจ้าของทั้งสองแล้ว แต่ฉันคิดว่าไดเรกทอรีย่อยหนึ่งหรือสองมีเจ้าของที่แตกต่างกัน ขอบคุณ!
Vedran

1
สิ่งนี้ใช้ได้กับฉัน :) ก่อนหน้านี้ฉันลองใช้docs.npmjs.com/นี้ ไม่สามารถเข้าใจได้ว่าเป็นปัญหาเดียวกันหรือต่างกัน
nim118

1
ดูเหมือนว่าในบางช่วงเวลาที่ฉันล้มเหลวกับโหนดหนึ่งในไดเรกทอรีแคชเหล่านั้นถูกสร้างขึ้นด้วยrootความเป็นเจ้าของ เรื่องนี้คงหมดไปหมด ขอบคุณ!
Lonnon Foster

2
มันใช้งานได้สำหรับฉันขอบคุณ! ฉันพยายามติดตั้ง npm ใหม่โดยใช้ตัวจัดการเวอร์ชันของโหนดซึ่งแนะนำโดย npm แต่มันไม่ทำงาน!
Winnie Phan


42

สิ่งนี้จะเกิดขึ้นหากครั้งแรกที่คุณรัน NPM ด้วย sudo เช่นเมื่อพยายามทำการติดตั้ง npm

โฟลเดอร์แคชจำเป็นต้องเป็นของผู้ใช้ปัจจุบันไม่ใช่ผู้ใช้รูท

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

สิ่งนี้จะให้สิทธิ์การเป็นเจ้าของโฟลเดอร์ด้านบนเมื่อใช้งานโดยสิทธิ์ผู้ใช้ปกติ (ไม่ใช่ sudo)

นอกจากนี้ยังเป็นที่น่าสังเกตว่าคุณไม่ควรติดตั้งแพ็คเกจระดับโลกโดยใช้ SUDO หากคุณพบปัญหาเกี่ยวกับการอนุญาตคุณควรเปลี่ยนไดเรกทอรีทั่วโลกของคุณ เอกสารแนะนำ:

mkdir ~/.npm-global

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

จากนั้นอัปเดต PATH ของคุณในทุกที่ที่คุณกำหนดว่า (~ / .profile เป็นต้น)

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

จากนั้นคุณจะต้องตรวจสอบให้แน่ใจว่าตัวแปร PATH env ถูกตั้งค่า (รีสตาร์ทเทอร์มินัลหรือใช้คำสั่ง source)

https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally


3
โหวตสิ่งนี้ขึ้นมาเพื่อคำอธิบายที่ชัดเจนว่าทำไม :)
lnoogn

ได้. วิธีนี้แก้ไขปัญหาสำหรับฉันเมื่อ "วิธีแก้ไขปัญหาที่ถูกต้อง" ด้านบนไม่ได้
John Smith

ทุกสิ่งนี้ควรจะถูกตัดออกไปในเวลาไม่เกิน 23.00 น. แต่เราต้องจัดการกับมันเอง คุณคิดว่ามันคงเป็นเรื่องสำคัญมากสำหรับผู้ดูแลรักษาที่จะแก้ไขสิ่งนี้ แต่ฉันรู้อะไร ขอบคุณที่อธิบายว่าทำไมเราต้องทำคำสั่งเหล่านี้!
YungGun


9

คำตอบข้างต้นไม่ได้ผลสำหรับฉัน --unsafe-permเพียงแค่พยายามที่จะเรียกใช้คำสั่งของคุณด้วย

เช่น

npm install -g node@latest --unsafe-perm

ดูเหมือนว่าจะแก้ปัญหาได้


@JenLim คุณแยกออกหรือไม่?
Junaid Farooq

ฉันแก้ไขปัญหาด้วยการรันสิ่งต่อไปนี้ในเทอร์มินัล: npm cache clear - force
Aspyn Lim

6

npm cache clear --forceถ้าไม่มีข้อเสนอแนะในคำตอบทำงานออกมาให้ลองใช้คำสั่งต่อไปนี้: มันใช้งานได้สำหรับฉัน

ผมพบว่ามันที่https://github.com/vuejs/vue-cli/issues/1809


2

เพียงแค่สร้างโฟลเดอร์_cache/tmpภายใต้.npmที่ตั้งด้วยตนเอง/Users/marknorgate/.npm/_cacache/tmpและเรียกใช้คำสั่งของคุณด้วยการเข้าถึงของผู้ดูแลระบบ






1

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

mkdir ~/.npm-global

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

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

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

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

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

source ~/.profile

ตอนนี้ใช้ติดตั้ง NPM มันควรจะทำงาน





-1

อันนี้ใช้ได้สำหรับฉัน:

sudo chown -R $(whoami) ~/.npm

ฉันไม่ได้ใช้-gเพราะฉันเป็นผู้ใช้คนเดียว ฉันใช้ MacBook Air

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.