ข้อผิดพลาด: EACCES: สิทธิ์ถูกปฏิเสธเข้าถึง '/ usr / local / lib / node_modules'


298

สิ่งที่อาจทำให้เกิดข้อผิดพลาดError: EACCES: permission denied, access '/usr/local/lib/node_modules'?

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log

9
ดูคู่มืออย่างเป็นทางการโดย NPM เกี่ยวกับวิธีแก้ไขปัญหานี้: docs.npmjs.com/…
Dzhuneyt

คำตอบ:


488

เปลี่ยนการอนุญาตไฟล์ของคุณ .. เช่นนี้

ตรวจสอบก่อนใครเป็นเจ้าของไดเรกทอรี

ls -la /usr/local/lib/node_modules

เป็นการปฏิเสธการเข้าถึงเนื่องจากโฟลเดอร์ node_module เป็นเจ้าของโดย root

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

ดังนั้นสิ่งนี้จำเป็นต้องเปลี่ยนโดยการเปลี่ยนรูทเป็นผู้ใช้ของคุณ แต่ก่อนใช้คำสั่งด้านล่างเพื่อตรวจสอบผู้ใช้ปัจจุบันของคุณ ฉันจะได้รับชื่อของผู้ใช้ที่ใช้งานผ่านบรรทัดคำสั่งใน OS X ได้อย่างไร?

id -un

หรือ

whoami

จากนั้นเปลี่ยนเจ้าของ

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

หรือ

sudo chown -R ownerName: /usr/local/lib/node_modules

หรือ

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

3
มีหลายกรณีที่เมื่อเพิ่ม sudo ในคำสั่งก็ไม่ทำงานเช่นกัน สิ่งนี้ใช้ได้สำหรับฉันและควรได้รับคำตอบ
Niroj Shr

1
บริษัท ของฉันใช้การลงชื่อเพียงครั้งเดียวของ Microsoft Active Directory ดังนั้นชื่อกลุ่มจึงมีการทับและมีช่องว่างในนั้น ซึ่งทำให้สิ่งนี้ทำได้ยากขึ้นเล็กน้อย sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modulesคำสั่งที่ผมใช้เป็น id -gn myuserให้ถูกต้องรายชื่อกลุ่มที่ผมทำ
แพทริค

44
นี้จะเป็นประโยชน์ illegal group nameแต่เมื่อฉันเรียกใช้คำสั่งในการเปลี่ยนแปลงเจ้าของผมได้ ดังนั้นฉันจึงเปลี่ยนคำสั่งเป็นsudo chown -R ownerName: /usr/local/lib/node_modulesและใช้งานได้
Midori

4
แม้ว่าจะเป็นคำตอบที่ถูกต้อง แต่ฉันก็พบปัญหานี้หลายครั้งและวิธีแก้ปัญหาที่ดีกว่าก็คือใช้ nvm chownวิธีนี้คุณจะไม่จำเป็นต้องเป็นเจ้าของไฟล์การเปลี่ยนแปลงการใช้ github.com/nvm-sh/nvm
Roee

1
แทนการสวดมนต์สิทธิ์แนะนำในเอกสารที่จะติดตั้ง npm ด้วย nvm ดูstackoverflow.com/a/59575266/2311074
Adam

106

เพื่อลดโอกาสของข้อผิดพลาดในการอนุญาตคุณสามารถกำหนดค่า npm ให้ใช้ไดเรกทอรีอื่น ในตัวอย่างนี้คุณจะสร้างและใช้ไดเรกทอรีที่ซ่อนอยู่ในไดเรกทอรีบ้านของคุณ

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

mkdir ~/.npm-global

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

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

ในโปรแกรมแก้ไขข้อความที่คุณต้องการเปิดหรือสร้าง

~/.profile

ไฟล์และเพิ่มบรรทัดนี้:

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

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

source ~/.profile

เพื่อทดสอบการกำหนดค่าใหม่ของคุณให้ติดตั้งแพคเกจทั่วโลกโดยไม่ต้องใช้ sudo


18
นี่เป็นตัวเลือกที่ทำลายล้างน้อยที่สุดในความคิดของฉัน นอกจากนี้ยังแนะนำในเว็บไซต์ NPM
17xande

หรือถ้าคุณไม่ต้องการที่จะทำnpm config set prefix(โดยเฉพาะอย่างยิ่งถ้าคุณกำลังเขียนโปรแกรมติดตั้งที่ไม่ใช่ราก), คุณอาจต้องการที่จะแทนที่PREFIXvar env หรือให้ตัวเลือกทั้งสองซึ่งเทียบเท่ากับ--prefix npm config set prefix(ไม่แน่ใจว่าจะลบล้างอัน
ไหน

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

1
นี่คือสิ่งที่กำลังมองหา! ขอบคุณ
djangodude

นี่คือทางออกที่แนะนำจริง ๆ และทางออกที่ดีที่สุดในระยะยาว
Al-Mothafar

49

สิ่งที่คุณต้องทำคือการเพิ่ม USER ให้กับเจ้าของ / local / lib

sudo chown -R $USER /usr/local/lib

7
หากผู้อ่านในอนาคตไม่เข้าใจการอนุญาตโปรดอ้างอิงเอกสารทางการของ NPM และแก้ไขปัญหาให้ถูกต้อง docs.npmjs.com/… . โดยเฉพาะผู้อ่านในอนาคตอาจติดตั้ง npm ใหม่ด้วยตัวจัดการเวอร์ชันโหนด (แนะนำ)
ordonezalex

1
นี่เป็นสิ่งที่ค่อนข้างตรงไปตรงมา นอกจากนี้ยังหมายความว่าคุณไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งใดใน lib อีกครั้ง คุณเป็นเจ้าของ / usr / local / lib
Obinna Nnenanya

4
นี่ไม่ใช่ทางออกที่ดีเลย โดยการเรียกใช้ข้างต้นchownคุณมีความเสี่ยงสูงที่จะทำลายโครงสร้างการอนุญาตของระบบไฟล์ทั้งหมด
ลาร์ส

3
คำสั่งนี้ทำลายสิทธิ์ของฉันทั้งหมด จำเป็นต้องกู้คืนทุกสิ่งอีกครั้ง
Azam Alvi

4
เพื่อความแม่นยำนี่ไม่ได้เป็นการเพิ่มเจ้าของ นี้จะเปลี่ยน เจ้าของซึ่งอยู่ไกลทำลายมากขึ้นกว่าเพียงแค่การเพิ่มและเกือบจะเป็นการทำลายล้างเป็น sudo chmod -R 777 /
SOFe

29

ลองเพิ่มsudoต่อท้ายคำสั่งที่คุณพยายาม

ดังนี้: ติดตั้ง sudo npm

การใช้ sudo กับคำสั่งใน Linux / UNIX จะยกระดับสิทธิ์ของคุณในระดับ superuser ใน Windows บัญชี superuser มักจะเรียกว่า 'ผู้ดูแลระบบ' ใน Linux / Unix บัญชี superuser โดยทั่วไปจะมีชื่อว่า 'root'

ผู้ใช้รูทมีสิทธิ์เข้าถึงแก้ไขหรือลบไฟล์เกือบทุกไฟล์ในคอมพิวเตอร์ของคุณ บัญชีผู้ใช้ปกติสามารถเข้าถึงแก้ไขหรือลบไฟล์ได้น้อยลง ข้อ จำกัด ในบัญชีปกติป้องกันคอมพิวเตอร์ของคุณจากโปรแกรมหรือผู้ใช้ที่ไม่ได้รับอนุญาตหรือเป็นอันตราย กระบวนการบางอย่างต้องการให้คุณดำเนินการกับไฟล์หรือโฟลเดอร์ตามปกติคุณไม่มีสิทธิ์ในการเข้าถึง การติดตั้งโปรแกรมที่ทุกคนสามารถเข้าถึงได้เป็นหนึ่งในการกระทำเหล่านี้

ในกรณีของคุณการรันคำสั่งการติดตั้งด้วย sudo จะให้สิทธิ์แก่ผู้ใช้ superuser และอนุญาตให้คุณแก้ไขไฟล์ที่ผู้ใช้ปกติของคุณไม่ได้รับอนุญาตให้แก้ไข


57
หลีกเลี่ยงการใช้ sudo ขณะติดตั้งแพคเกจ npm ยิ่งคุณไปกับเส้นทางดังกล่าวมากเท่าไหร่ก็จะยิ่งแก้ไขได้ยากขึ้นเท่านั้น เพียงแค่เปลี่ยนการอนุญาตไปยังโฟลเดอร์ NPM ตามที่ระบุไว้ในคำตอบอื่นและใช้ชีวิตที่ดีขึ้น
Lukas Liesis

2
อาจใช้งานได้ แต่จะทำให้เกิดปัญหาอย่างต่อเนื่องเมื่อเวลาผ่านไป หลีกเลี่ยงสิ่งนี้หากคุณไม่ต้องการรับข้อผิดพลาดที่ได้รับอนุญาตทุกชนิด เช่นเดียวกับที่ถูกปฏิเสธไปยังโฟลเดอร์แคช npm ปฏิเสธที่จะติดตั้งและอื่น ๆ
Lukas Liesis

1
คำตอบนี้ควรถูกลบออกโดยใช้ sudo ก่อนการติดตั้งแพคเกจจะเป็นแบบอย่างที่อันตรายมากหากผู้ใช้ไม่เข้าใจการอนุญาต โปรดอ้างอิงคำตอบแรกที่คุณเปลี่ยนความเป็นเจ้าของที่ตั้งของโหนดหลักหนึ่งครั้ง
SeaWarrior404

19

ฉันลองวิธีแก้ปัญหาของคำตอบที่ได้รับจาก @okanda แต่มันไม่ได้ผลสำหรับฉัน

อย่างไรก็ตามมันทำงานได้อย่างสมบูรณ์แบบเมื่อฉันทำมันสำหรับหลาย ๆ โฟลเดอร์อย่างที่กล่าวไว้ในกระทู้นี้: https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493

sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/

ขอบคุณคำตอบนี้ช่วยฉันได้ Ubuntu 18.04.3
bakhti_UZB

ฉันมีวิธีแก้ไขปัญหาอื่นก่อนหน้านี้ แต่ด้วยเหตุผลบางอย่างในครั้งนี้มันใช้สิ่งเหล่านี้ทั้งหมดไปยังโฟลเดอร์ทำงาน ขอบคุณ Mac v 10.15.2
Amir5000

1
การเรียกใช้ในเซิร์ฟเวอร์การผลิตปลอดภัยหรือไม่?
Cheezey

16

ในขณะที่ติดตั้งแพ็คเกจทั่วโลกในอูบุนตูคุณต้องมีสิทธิ์เขียนพิเศษในขณะที่คุณกำลังเขียนไปยังusr/binโฟลเดอร์ เพื่อความปลอดภัย ดังนั้นทุกครั้งที่คุณติดตั้งแพ็คเกจทั่วโลกให้ใช้:

sudo npm install -g [package-name]

สำหรับกรณีเฉพาะของคุณจะเป็น:

sudo npm install -g typescript

14

ดูเหมือนว่าคุณกำลังมีปัญหาเกี่ยวกับการอนุญาต หากคุณกำลังติดตั้งnpm-packagesอาจเป็นไปได้ว่าคุณได้รับEACCESข้อผิดพลาดเมื่อพยายามติดตั้งแพคเกจทั่วโลก ซึ่งหมายความว่าคุณไม่ได้รับอนุญาตให้เขียนไปยังไดเรกทอรีที่npmใช้ในการจัดเก็บแพคเกจทั่วโลกและคำสั่ง

ลองใช้คำสั่ง: sudo chmod u+x -R 775 ~/.npmและsudo chown $USER -R ~/.npmหรือคุณสามารถเรียกใช้npmคำสั่งใดก็ได้ด้วยsudoซึ่งควรแก้ไขปัญหาของคุณ

หากคุณกำลังติดตั้งแบบnpm-packageโลคัลคุณควรอยู่ในไดเร็กทอรีโปรเจ็กต์โลคัลและสามารถลองรันsudo npm install <pkg-name>คำสั่งเพื่อติดตั้งแพ็กเกจที่จำเป็น วัตถุประสงค์ในการใช้งานsudoคือมันจะเปลี่ยนการอนุญาตของเจ้าของเพื่อให้คุณสามารถทำให้ผู้ใช้ปัจจุบันของคุณได้รับอนุญาตให้เรียกใช้npmคำสั่ง

ฉันขอแนะนำให้คุณดูที่https://docs.npmjs.com/getting-started/fixing-npm-permissions


10

ฉันพยายามติดตั้ง expo แบบโต้ตอบและนอกเหนือจาก sudo ฉันต้องเพิ่ม - ไม่ปลอดภัย - Perm

แบบนี้. สิ่งนี้จะช่วยแก้ไขปัญหาของฉัน

sudo npm install -g expo-cli --unsafe-perm

@ Furquan ขอบคุณมาก ... มันใช้งานได้สำหรับฉันหลังจากลองใช้วิธีแก้ไขปัญหาต่าง ๆ
AzeTech

@ AzeTech ฉันดีใจที่มันช่วย: D
Furquan

9

หากคุณกำลังประสบปัญหานี้กับคุณ Mac ทำตามขั้นตอนเหล่านี้

การตรวจสอบครั้งแรกว่าใครเป็นเจ้าของไฟล์นี้โดยใช้คำสั่งด้านล่าง

ls -la /usr/local/lib/node_modules

คุณจะพบไฟล์บางไฟล์เช่นด้านล่างไฟล์ใดไฟล์หนึ่งอยู่ด้านล่าง

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

คุณสังเกตเห็นว่าไฟล์ข้างต้นเป็นของ root สำหรับการเปลี่ยนแปลงภายในคุณจำเป็นต้องเปลี่ยนเจ้าของการจัดส่งของเส้นทาง

คุณสามารถใช้ตรวจสอบว่าใครเป็นผู้ใช้ปัจจุบันโดยคำสั่งนี้

id -un (in my case user is yamsol)

จากนั้นคุณสามารถเปลี่ยนได้โดยเรียกคำสั่งนี้ (เพียงแทนที่ชื่อผู้ใช้ของคุณด้วย ownerName)

sudo chown -R ownerName: /usr/local/lib/node_modules

ในกรณีของฉันตามที่คุณรู้ว่าผู้ใช้คือ "yamsol" ฉันจะเรียกคำสั่งนี้ด้วยวิธีนี้

sudo chown -R yamsol: /usr/local/lib/node_modules

แค่นั้นแหละ.


8

ระวังการตอบสนองทั้งหมดที่เปลี่ยนเจ้าของไดเรกทอรีทั้งหมดภายใต้/ usr / local โดยทั่วไปอย่าสับสนระบบ linux !!!

ฉันคิดว่าวิธีที่ดีที่สุดคือการใช้โฟลเดอร์ของคุณเพื่อค้นหาแพ็คเกจทั่วโลก: https://www.competa.com/blog/how-to-run-npm-without-sudo/


8

คุณสามารถติดตั้ง npm ผ่านตัวจัดการเวอร์ชันโหนดหรือตัวติดตั้งโหนด ในเอกสารระบุไว้:

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

เนื่องจากคุณมีข้อผิดพลาดเกี่ยวกับการอนุญาตคุณอาจติดตั้ง npm ผ่านตัวติดตั้งโหนดและตอนนี้คุณต้องติดตั้งใหม่ด้วย nvm (ตัวจัดการเวอร์ชันโหนด)

โชคดีที่มันง่ายมาก คุณไม่จำเป็นต้องลบเวอร์ชันปัจจุบันของ npm หรือ Node.js

สิ่งที่คุณต้องทำคือ

  1. ติดตั้ง nvm สำหรับ OSX หรือ Linux Node ให้ใช้:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash

    สิ่งนี้จะสร้างโฟลเดอร์ nvm ในโฮมไดเร็กตอรี่ของคุณ

แล้วก็

  1. ติดตั้ง npm และ node.js ถึง nvm ในการทำเช่นนั้นเพียงโทร

    nvm install stable

ตอนนี้คุณสามารถติดตั้งแพ็คเกจได้ทั่วโลกโดยไม่ต้องใช้sudoหรือเปลี่ยนเจ้าของโฟลเดอร์node_modulesในusr


ขอบคุณสำหรับคำตอบของอดัม! เพียงแค่สงสัยว่าสิ่งที่อาจเป็นภาวะแทรกซ้อนที่เป็นไปได้ในภายหลังในกระบวนการติดตั้ง build / environment?
吖奇说 - 何魏奇 Archy Will เขา

สำหรับคนที่fishต้องการทำงานอย่างถูกต้อง nvm จำเป็นต้องมีเครื่องห่อปลาgithub.com/FabioAntunes/fish-nvm
吖奇说 - 何魏奇 Archy Will เขา

@ 吖奇说ARCHYSHUōฉันไม่เคยได้ยินเกี่ยวกับภาวะแทรกซ้อนใด ๆ เมื่อติดตั้งโหนดด้วย nvm และเนื่องจากได้รับคำแนะนำจากเอกสารอย่างเป็นทางการฉันจึงชอบวิธีที่ดีที่สุดที่จะไป :)
อดัม

7

ใช้คำสั่งนี้เพื่อติดตั้งnpm ในฐานะผู้ใช้ sudo:

sudo npm install -g create-react-app 

แทนการ ติดตั้ง npm -g create-react-a pp


quoting @ Lukas- ใช้ sudo ขณะติดตั้งแพ็กเกจ npm ยิ่งคุณไปกับเส้นทางดังกล่าวมากเท่าไหร่ก็จะยิ่งแก้ไขได้ยากขึ้นเท่านั้น เพียงแค่เปลี่ยนการอนุญาตไปยังโฟลเดอร์ NPM ตามที่ระบุไว้ในคำตอบอื่นและใช้ชีวิตที่ดีขึ้น
सत्यमेवजयते

6

ฉันสามารถแก้ไขปัญหาโดยใช้สิ่งต่อไปนี้ใน mac

sudo npm install -g @aws-amplify/cli --unsafe-perm=true

6

สำหรับผู้ใช้ nvm

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

และ

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

แทนที่v8.9.1ด้วยเวอร์ชันโหนดของคุณที่คุณกำลังใช้


สิ่งนี้ไม่ได้ผลสำหรับฉัน! ยังคงได้รับข้อผิดพลาด: npm ERR! ข้อผิดพลาด: EACCES: สิทธิ์ถูกปฏิเสธเปลี่ยนชื่อ /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/columnify/node_modules/node_modules/ ปรากฏเป็นค่าเริ่มต้น สิ่งที่มี /.staging .. โฟลเดอร์นั้นไม่มีอยู่หลังจากความพยายามในการติดตั้ง คุณช่วยฉันได้ไหม
ซามูเอล

@Samuel คุณรันคำสั่งนี้หรือไม่ sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle

5

ดูเหมือนว่าคุณพยายามติดตั้งแพคเกจ npm ทั่วโลกมากกว่าในเครื่องตามman npm installคำอธิบาย:

-g หรือ --globalอาร์กิวเมนต์จะทำให้ NPM ในการติดตั้งแพคเกจทั่วโลกมากกว่าในประเทศ

โดยทั่วไปเมื่อคุณตั้งค่าโปรเจ็กต์ npm (ระหว่างที่คุณมี) คุณไม่ควรติดตั้งแพ็กเกจบนโมดูลโกลบอลของ Node.js (/ usr / local / lib / node_modules) เป็นบันทึกการดีบักของคุณ ข้อเสนอแนะ

แทนที่จะใช้-gให้ใช้--saveซึ่งจะบันทึกแพ็กเกจโดยอัตโนมัติเป็นการอ้างอิงสำหรับpackage.jsonไฟล์ของคุณ:

แบบนี้:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}

แต่ตามคำตอบอื่น ๆ ที่กล่าวถึงถ้าคุณจะใช้-gคุณต้องใช้sudo( หากผู้ใช้ของคุณมีสิทธิ์ sudo: ดู / etc / sudoers ) เมื่อดำเนินการnpm install express-generator -gแต่ที่จริงแล้วมันไม่ใช่ความคิดที่ดี

ข้อสังเกต

มีคำแนะนำสำหรับการติดตั้งexpress-generatorพร้อม-gตัวเลือกเพื่อให้สคริปต์express-cli.jsพร้อมใช้งานบนเส้นทางของระบบ แต่คุณสามารถใช้สคริปต์ที่ติดตั้งในเครื่องได้เช่นกันโดยอยู่ที่node_modulesโครงการ if npm ของคุณ:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

หากข้อความเช่น/ usr / bin / env: 'node': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวปรากฏขึ้นให้ติดตั้งnodejs-legacy(Debian / Ubuntu)

IMHO การใช้-g(การใช้sudo) ก็เหมือนhic sunt draconesหากคุณไม่แน่ใจในผลที่ตามมา

สำหรับข้อมูลเพิ่มเติม:


4

สิ่งนี้เกิดขึ้นเนื่องจากnpmไม่สามารถเข้าถึงnode_modulesไดเรกทอรีส่วนกลางของคุณแบบโลคัลได้

sudo chown -R Name: /usr/local/lib/node_modules

เช่น

sudo chown -R developerayo: /usr/local/lib/node_modules

แก้ไขปัญหาตอนนี้คุณสามารถเรียกใช้คำสั่งที่คุณรันอีกครั้ง


3

คุณสามารถเปลี่ยนเจ้าของหรือใช้ sudo ก่อนที่คุณจะสั่งเช่นนี้

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( เปลี่ยนเจ้าของ )

หรือ

sudo npm install -g json-server

แค่นั้นแหละ.


3

สำหรับ linux / ubuntu หากคำสั่ง

npm install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

npm ERR! 

npm ERR! The operation was rejected by your operating system.

npm ERR! It is likely you do not have the permissions to access this file as the current user

npm ERR! 

npm ERR! If you believe this might be a permissions issue, please double-check the

npm ERR! permissions of the file and its containing directories, or try running

npm ERR! the command again as root/Administrator (though this is not recommended).


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

การแก้ไข: ติดตั้งด้วยสิทธิ์ root

sudo npm install <package_name> -g


3

คุณต้องได้รับอนุญาตจากระดับ superuser เพื่อติดตั้ง React ใน Linux / Unix บัญชี superuser โดยทั่วไปจะมีชื่อว่า 'root'

ในการรับสิทธิ์ superuser เพียงเรียกใช้คำสั่งต่อไปนี้บนเทอร์มินัลของคุณ:

sudo -i

จากนั้นเพียงเรียกใช้คำสั่งเพื่อติดตั้ง React:

npm install -g create-react-app

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

npx create-react-app app_name

1
การใช้ sudo เป็นข้อเสนอที่มีความเสี่ยงแพคเกจบางอย่างอาจปลอดภัย แต่ผู้อื่นอาจออกเดินทางเพื่อทำสิ่งอื่นและใช้ประโยชน์จากสิทธิพิเศษระดับรากที่คุณให้สิทธิ์ sudo รันคำสั่งที่ตามมาในฐานะ superuser
rustyDev

แพคเกจบางอย่างcreate-react-appต้องการสิทธิ์รูทที่จะติดตั้งเป็นแพ็คเกจทั่วโลก; มิฉะนั้นคุณจะไม่สามารถติดตั้งได้ อย่างไรก็ตามทีม reactjs สนับสนุนให้เราใช้คำสั่งต่อไปนี้npx create-react-app app_nameแทนการติดตั้งแพ็คเกจทั่วโลก
Fatema T. Zuhora



2

หลังจากการวิจัยเป็นเวลานานฉันเข้าใจว่าไม่จำเป็นสำหรับ Mac OS ในการติดตั้ง angi cli เพียงแค่ใช้sudo npm install -g @angular/cliเทอร์มินัลของคุณจะแจ้งรหัสผ่านให้ป้อนรหัสผ่านของคุณมันจะดำเนินการติดตั้ง cli มันใช้งานได้สำหรับฉัน



2

หากคุณใช้งาน Linux (เช่น: Arch)

# npm -g install packageName

โดยค่าเริ่มต้นคำสั่งนี้จะติดตั้งแพ็กเกจภายใต้ / usr / lib / node_modules / npm และต้องการสิทธิ์พิเศษในการทำเช่นนั้น

เพื่ออนุญาตการติดตั้งทั่วทั้งผู้ใช้

หากต้องการอนุญาตการติดตั้งแพ็กเกจส่วนกลางสำหรับผู้ใช้ปัจจุบันให้ตั้งค่าnpm_config_prefixตัวแปรสภาพแวดล้อม ใช้ทั้ง npm และไหมพรม

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

ลงชื่อเข้าใช้อีกครั้งหรือแหล่งที่มาเพื่ออัปเดตการเปลี่ยนแปลง

นอกจากนี้คุณยังสามารถระบุพารามิเตอร์--prefix npm installอย่างไรก็ตามไม่แนะนำให้ทำเช่นนี้เนื่องจากคุณจะต้องเพิ่มทุกครั้งที่คุณติดตั้งแพ็คเกจทั่วโลก

$ npm -g install packageName --prefix ~/.node_modules

ดังนั้นคุณไม่จำเป็นต้อง chown ใบอนุญาตโฟลเดอร์


1

ฉันสามารถกำจัดปัญหานี้ได้ด้วยการติดตั้งnvmจากนั้นตั้งค่าโหนดเป็นเวอร์ชันล่าสุด

  1. ติดตั้งnvmโดยใช้curl(สำหรับเวอร์ชั่นล่าสุดไปที่nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. แสดงรายการเวอร์ชันของโหนดที่พร้อมใช้งาน
nvm ls

v10.12.0
เริ่มต้น -> โหนด v10.12 (-> v10.12.0)
-> เสถียร (-> v10.12.0) (ค่าเริ่มต้น)
เสถียร -> 10.12 (-> v10.12.0)
...

  1. เลือกเวอร์ชันของโหนดที่จะใช้
nvm use v10.12

nvm เข้ากันไม่ได้กับตัวเลือก "คำนำหน้า" การกำหนดค่า npm: ขณะนี้ตั้งเป็น ""

  1. เรียกใช้สิ่งนี้เพื่อยกเลิกการตั้งค่าตัวเลือก:
nvm use --delete-prefix v10.12.0

หลังจากทำตามคำสั่งด้านบนคุณจะสามารถติดตั้ง react / angular ใน Ubuntu




0

ฉันใช้ sudo แล้ว แต่ไม่ได้แก้ปัญหาฉันได้แก้ไขปัญหาด้วยการเปลี่ยนการอนุญาตโฟลเดอร์ node_modules

sudo chmod -R 777 node_modules

หากคุณต้องการคุณสามารถแทนที่ 777 ด้วยรหัสอื่น ๆ หากคุณไม่ได้กำหนดสิทธิ์สำหรับผู้ใช้ / กลุ่มทั้งหมด


0

สำหรับผู้ที่ยังไม่สามารถแก้ไขปัญหาได้หลังจากใช้วิธีแก้ไขปัญหาข้างต้นแล้ว ลองสิ่งนี้

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

นั่นควรทำเคล็ดลับไชโย!

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