NPM พ่นข้อผิดพลาดโดยไม่ต้อง sudo


1286

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

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0

35
โปรดพิจารณาวิธีแก้ปัญหาโดยใช้NVM : stackoverflow.com/a/24404451/1480391 (แทนการแฮ็คที่ได้รับอนุญาต)
Yves M.

2
@janaspage คุณไม่สามารถติดตั้งโหนดหรือ NVM (Node Version Manager) ผ่านทางNPM (Node Package Manager) มันไม่สมเหตุสมผล NPM มาภายในโหนด (ติดตั้งในเวลาเดียวกัน) ดูที่หน้า Wikipedia: en.wikipedia.org/wiki/Npm_(software)
Yves M.

5
ในที่สุดการแก้ปัญหาที่ดีกว่าsudo chown: github.com/sindresorhus/guides/blob/master/…
Dmitri Zaitsev

ภายใต้ OSX และการติดตั้งโหนดด้วย intoffer 0kg อย่างเป็นทางการโซลูชันนี้ไม่ทำงาน ฉันใช้อันนี้แทน: stackoverflow.com/a/34968008/675565
fmquaglia

2
มันอธิบายถึงปัญหาและการแก้ไข: docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

คำตอบ:


2268

ดูเหมือนว่าปัญหาสิทธิ์ในไดเรกทอรีบ้านของคุณ หากต้องการอ้างสิทธิ์ความเป็นเจ้าของไดเรกทอรี. npm ให้ดำเนินการดังนี้

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

102
ฉันคิดว่าwhoamiมันเป็นตัวยึดตำแหน่ง แต่มันพิมพ์ได้ตามที่เป็นจริงดังนั้นจึงต้องเป็นตัวแปรที่ฉันไม่เข้าใจ
SimplGy

127
whoami เป็นคำสั่งของเชลล์ที่เกิดขึ้นจริงen.wikipedia.org/wiki/Whoami backticks รอบ ๆwhoamiให้แน่ใจว่าจะได้รับการดำเนินการอย่างถูกต้องแล้ววางลงในคำสั่ง chown
โนอาห์

13
คุณสามารถระบุชื่อผู้ใช้ของคุณได้เช่นกัน หากชื่อผู้ใช้ของคุณคือ "simpleascouldbe" คำสั่งจะเป็นsudo chown -R simpleascouldbe ~/.npm
โนอาห์

13
npm ไม่ต้องการหรือไม่ควรใช้ sudo - ดูคำตอบด้านล่าง @HeberLZ โดยเฉพาะอย่างยิ่งตัวเลือกที่สองของเขาเกี่ยวกับ: ./configure --prefix = xxxxxx
Scott Stensland

9
@ChristopherWill: นี่จะไม่เปลี่ยนความเป็นเจ้าของของไดเรกทอรีระบบ สิ่งนี้กำลังเปลี่ยนความเป็นเจ้าของของไดเรกทอรีในโฮมไดเร็กตอรี่ของผู้ใช้, ซึ่งผู้ใช้ควรเป็นเจ้าของ.
user4815162342

619

สิทธิ์ที่คุณใช้เมื่อติดตั้งโหนดจะต้องเมื่อทำสิ่งที่ชอบในการเขียนของคุณไดเรกทอรี NPM ( npm link, npm install -gฯลฯ )

คุณอาจรันการติดตั้งโหนดด้วยสิทธิ์รูทนั่นเป็นสาเหตุที่การติดตั้งแพ็กเกจส่วนกลางขอให้คุณเป็นรูท


โซลูชันที่ 1: NVM

อย่าแฮ็คที่มีสิทธิ์ติดตั้งโหนดอย่างถูกต้อง

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

NVM (Node Version Manager) ให้คุณติดตั้ง Node โดยไม่ต้องใช้สิทธิ์ root และอนุญาตให้คุณติดตั้ง Node หลายรุ่นเพื่อเล่นกับมันได้อย่างง่ายดาย .. เหมาะสำหรับการพัฒนา

  1. ถอนการติดตั้งโหนด (อาจต้องได้รับอนุญาตจากรูท) สิ่งนี้อาจช่วยคุณได้
  2. จากนั้นติดตั้งNVMตามคำแนะนำในหน้านี้
  3. ติดตั้งโหนดผ่าน NVM: nvm install node

ตอนนี้npm link, npm install -gจะไม่ทำให้คุณต้องเป็นราก

แก้ไข: ดูhttps://docs.npmjs.com/getting-started/fixing-npm-permissions


โซลูชันที่ 2: ติดตั้งแพคเกจทั่วโลกสำหรับผู้ใช้ที่กำหนด

อย่าแฮ็คที่มีสิทธิ์ติดตั้งแพคเกจ npm ทั่วโลกในวิธีที่ถูกต้อง

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

ลองอ่านบทความที่ยอดเยี่ยมนี้สำหรับคำแนะนำทีละขั้นตอนในการติดตั้งโมดูล npm ทั่วโลกโดยไม่ต้อง sudo

ดูเพิ่มเติม: เอกสาร NPM บนFixing สิทธิ์


32
จากโซลูชั่นทั้งหมดที่โพสต์โซลูชั่น NVM ที่นี่ให้ผลลัพธ์ที่ดีที่สุดสำหรับฉัน ขอแนะนำให้ใช้ NVM แทนการใช้ของเล่นที่มีสิทธิ์
wenincode

9
คำแนะนำเหล่านี้ทำงานได้ดีมาก อย่างไรก็ตามคุณอาจต้องการลบโมดูลที่คุณติดตั้งด้วย sudo ก่อนที่จะถอนการติดตั้ง nodejs : npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm- ฉันต้องติดตั้ง nodejs ใหม่และในรูทเชลล์และถอนการติดตั้งมิฉะนั้นคุณจะยังคงมี symlink ไปยัง yo, grunt เป็นต้น
Bruno Flávio

4
นี่เป็นทางออกที่ดีที่สุดฉันลบโมดูลทั้งหมดก่อนทำsudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com/a/22290968/1449157จากนั้นลบออกnpmและติดตั้งผ่านnvm
Fabio Antunes

3
สำหรับคำแนะนำในการถอนการติดตั้งสำหรับโหนดให้ใช้คำตอบ SO นี้stackoverflow.com/a/11178106/480031
จัดการ

3
เหตุใดจึงใช้การรูทเพื่อติดตั้งโหนดบนเครื่องที่ใช้งานจริง
Bruno Peres

401

นอกจากนี้คุณจะต้องมีสิทธิ์เขียนในnode_modulesไดเรกทอรี:

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

7
เช่นเดียวกับ~/tmpไดเรกทอรีสำหรับฉัน
knownasilya

122
ฉันไม่รู้ว่าทำไมเรื่องนี้ถึงได้ upvotes มันเป็นวิธีปฏิบัติที่ดีมากในการเปลี่ยนความเป็นเจ้าของไดเรกทอรีระบบให้กับผู้ใช้เฉพาะ! โปรดดูคำตอบด้านล่างสำหรับโซลูชันอื่น ๆ (เช่นการสร้างกลุ่มแยกต่างหากสำหรับผู้ใช้โหนด)
Christopher Will

1
ฉันไม่ได้ในnode_modules /usr/local/lib/WTF?
คอนเนอร์ปลิง

27
สิ่งที่คุณทำ - อย่างแน่นอนอย่าเรียกใช้ 'sudo chmod -R whoami' บน / usr / local / lib หรือ / usr / lib / คุณจะทำลายไฟล์ sudoers ของคุณและคุณจะเกลียดตัวเอง
qodeninja

7
ทุกคนโปรดลงคะแนนสิ่งนี้ ... Then I ran sudo chown -R $USER /* and everything was fine- ไม่ - คุณกำลังทำลายเครื่องจักรของคุณ
commonpike

75

การเปลี่ยนเจ้าของในโฟลเดอร์ "ระบบทั่วโลก" คือการแฮก ในการติดตั้งใหม่ฉันจะกำหนดค่า NPM ให้ใช้ตำแหน่งที่เขียนได้แล้วสำหรับโปรแกรม "ผู้ใช้ทั่วโลก":

npm config set prefix ~/npm

จากนั้นตรวจสอบให้แน่ใจว่าคุณเพิ่มโฟลเดอร์นั้นในเส้นทางของคุณ:

export PATH="$PATH:$HOME/npm/bin"

ดู@ErikAndreas ' คำตอบเพื่อโมดูล NPM จะไม่ติดตั้งทั่วโลกโดยไม่ต้อง sudo และคู่มือขั้นตอนโดยขั้นตอนอีกต่อไปโดย@sindresorhus$MANPATHด้วยนอกจากนี้ยังมีชุด


ฉันเห็นด้วยอย่างยิ่งยกเว้นฉันขอแนะนำว่าหากคุณเพิ่งตั้งคำนำหน้าให้$HOMEโดยปกติแล้ว.profileสคริปต์ของคุณจะดูแล$PATHในครั้งต่อไปที่คุณส่งมา (เช่นครั้งต่อไปที่คุณเข้าสู่ระบบ)
Jess Austin

@JessAustin: บางที แต่มันจะทำให้คุณยุ่งเหยิงมากขึ้น$HOMEและอาจรบกวนไฟล์ / โฟลเดอร์ย่อย NPM อื่น ๆ (ในอนาคต?) ต้องการป้องกันไบนารีจากแพคเกจตัวจัดการ / ภาษา / ระบบที่ต่างกันและตั้งค่าไว้อย่างชัดเจน$PATH(ในสคริปต์เวลาเข้าสู่ระบบ) แทน
Joel Purra

เอ๊ะเกะกะ? เราเพียงแค่พูดคุยเกี่ยวกับโมดูลทั่วโลกที่ติดตั้งใน~/lib/node_modulesที่มี CLI เกี่ยวข้องของพวกเขาถ้ามีอยู่ใด ~/binๆ สำหรับผู้ใช้หลายคนโดยเฉพาะหากพวกเขาไม่มีรูททั้ง~/binและ~/libมีอยู่แล้ว
Jess Austin

@ JessAustin: มันเป็นเรื่องของการชนชื่อสำหรับห้องสมุดและไบนารี สมมติว่าคุณชี้ NPM วางไบนารี~/binแล้วทำเช่นเดียวกันสำหรับผู้จัดการแพคเกจเพิ่มเติมหนึ่งหรือสอง อาจไม่เกิดขึ้นในวันนี้หรือพรุ่งนี้ แต่มีความเสี่ยงที่ชัดเจนว่าแพคเกจสองตัวจากผู้จัดการที่แตกต่างกันมีการชนกันของชื่อและเขียนทับไฟล์ของกันและกัน เป็นกรณีที่ดีพอสำหรับฉันที่จะมีคำนำหน้าแยกต่างหาก (ตัวอย่างที่เป็นรูปธรรมจะได้รับการชื่นชม)
Joel Purra

1
ควรได้รับการยอมรับว่าเป็นคำตอบที่ดีที่สุด การเปลี่ยนโฟลเดอร์ระหว่างระบบอาจเป็นอันตรายได้
Vladimir Marton

58

ฉันพบสิ่งนี้เมื่อติดตั้ง Recess ( https://github.com/twitter/recess ) เพื่อรวบรวม CSS สำหรับ Bootstrap 3

เมื่อติดตั้งย่อมุม:

-npm install recess -g
  1. คุณต้องปลดล็อกการอนุญาตในhomeไดเรกทอรีของคุณเช่นเดียวกับที่โนอาห์ บอกว่า:

    sudo chown -R `whoami` ~/.npm
  2. คุณต้องมีสิทธิ์เขียนไปยังnode_modulesไดเรกทอรีเช่นXilo พูดว่าดังนั้นหากยังไม่ทำงานลอง:

    sudo chown -R `whoami` /usr/local/lib/node_modules
  3. หากคุณยังคงเห็นข้อผิดพลาดคุณอาจต้องแก้ไขการ/usr/localอนุญาต :

    sudo chown -R `whoami` /usr/local

โปรดทราบว่าตามที่ระบุไว้ในโพสต์ /usr/local/นี้ไม่ได้เป็นระบบจริงถ้าคุณอยู่ใน Mac ดังนั้นคำตอบนี้ "ปลอดภัย" อย่างแท้จริงสำหรับผู้ใช้ Mac อย่างไรก็ตามหากคุณใช้งานบน Linux โปรดดูคำตอบของChristopher Willด้านล่างสำหรับวิธีแก้ปัญหาแบบหลายผู้ใช้ที่เป็นมิตรระบบปลอดภัย (แต่ซับซ้อนกว่า)


35
นี่เป็นความคิดที่ไม่ดี คุณอาจไม่ต้องการให้ไดเรกทอรีระบบเป็นของผู้ใช้รายใดรายหนึ่ง นอกเหนือจากความกังวลด้านความปลอดภัยแล้วยังไม่รองรับผู้ใช้หลายคน
Christopher Will

2
ใช่ แต่มันเป็นทางออกที่ยอดเยี่ยมสำหรับสภาพแวดล้อมการพัฒนา +2 โดยเฉพาะถ้าคุณติดตั้ง node.js แล้วและต้องการโยกต่อไป!
elliotrock

คุณไม่ควรเป็นเจ้าของแพ็คเกจนอกไดเรกทอรีบ้านของคุณ
Ben

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

53

ระวัง!!! ระวัง!!! ระวัง!!!

chown หรือ chmod ไม่ใช่วิธีแก้ปัญหาเนื่องจากความเสี่ยงด้านความปลอดภัย

ทำสิ่งนี้แทนทำ:

ตรวจสอบครั้งแรกโดยที่ npm ชี้ไปที่หากคุณโทร:

npm config get prefix

หาก / usr ถูกส่งกลับมาคุณสามารถทำสิ่งต่อไปนี้:

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

สิ่งนี้จะสร้าง npm-Directory ใน Home-Directory ของคุณและชี้npmไปที่มัน

หากต้องการให้การเปลี่ยนแปลงนี้เป็นแบบถาวรคุณต้องเพิ่มคำสั่งส่งออกไปยัง. bashrc ของคุณ:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc

ฉันควรเปลี่ยนไปใช้ตัวเลือก 2 เท่านั้นถ้าฉันได้รับ / usr
อัลเบิร์ต Laure

3
โปรดทราบว่าคำสั่งสุดท้ายจะแสดงผลเนื้อหาจริง$PATHไม่ใช่ตัวสตริงเอง คุณควรเปลี่ยนสิ่งนั้น
Veluria

1
สิ่งนี้แก้ไขได้! ขอบคุณ. ฉันได้รับ 'ปฏิเสธการอนุญาตยกเลิกการเชื่อมโยง' / usr / bin / <pkg> '
valbaca

1
นี่คือคำตอบที่ดีที่สุด เป็นวิธีที่แนะนำในการแก้ปัญหา
Paulo Coghi - Reinstate Monica

เหตุใดการ chowning ความเสี่ยงด้านความปลอดภัย?
แฟรงก์

40

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

ต่อไปนี้เป็นวิธีทั่วไปและปลอดภัยยิ่งขึ้นที่รองรับผู้ใช้หลายคนเช่นกัน

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

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

ตอนนี้คุณสามารถติดตั้งโมดูลได้อย่างง่ายดายในฐานะผู้ใช้

npm install -g generator-angular

บางโมดูล (grunt, bower, yo ฯลฯ ) จะยังคงต้องติดตั้งเป็นรูท นี่เป็นเพราะพวกเขาสร้าง symlink ใน / user / bin /

แก้ไข

3 ปีต่อมาผมอยากแนะนำให้ใช้โหนดจัดการเวอร์ชัน ช่วยให้คุณปลอดภัยเวลาและปัญหามาก


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

1
บน Linux ฉันมักจะใช้staffกลุ่มในตัวเพื่อให้สิทธิ์กับโฟลเดอร์ dev ของฉัน นอกจากนี้คุณควรเรียกใช้chmod g+ws node_modulesเพื่อให้แน่ใจว่ากลุ่มของคุณมีสิทธิ์อ่าน / เขียน
jackvsworld

@jackvsworld ฉันไม่รู้จักกลุ่มพนักงาน ฉันเดาว่านี่จะเป็นวิธีที่ราบรื่นกว่าเนื่องจากไม่มีกลุ่มที่สร้างขึ้นมาใหม่ .. ถึงแม้ว่ามันจะมีความชัดเจนน้อยกว่าก็ตาม แต่ขอบคุณสำหรับอินพุตนี้
Christopher Will

โดยทั่วไป/usr/libจะอยู่ภายใต้การควบคุมของผู้จัดการแพ็คเกจระบบของคุณและคุณไม่ควรทำการเปลี่ยนแปลงใด ๆ
รวย remer

23

เอกสารอย่างเป็นทางการเกี่ยวกับวิธีการแก้ไขnpm installสิทธิ์ที่มีEACCESข้อผิดพลาดอยู่ที่https://docs.npmjs.com/getting-started/fixing-npm-permissions https://docs.npmjs.com/getting-started/fixing-npm-permissions

ฉันพบปัญหานี้หลังจากติดตั้งโหนดใหม่โดยใช้ตัว.pkgติดตั้งบน OSX มีคำตอบที่ยอดเยี่ยมอยู่ที่นี่ แต่ฉันยังไม่เห็นลิงก์ไปยัง npmjs.com

ตัวเลือกที่ 1: เปลี่ยนสิทธิ์เป็นไดเรกทอรีเริ่มต้นของ npm

  1. ค้นหาพา ธ ไปยังไดเร็กทอรีของ npm:

    npm config get prefix

สำหรับหลาย ๆ ระบบนี้จะเป็น/ usr / local

คำเตือน : ถ้าเส้นทางที่แสดงเป็นเพียง/ usrสลับไปที่ตัวเลือกที่ 2

  1. เปลี่ยนเจ้าของไดเรกทอรีของ npm เป็นชื่อของผู้ใช้ปัจจุบัน (ชื่อผู้ใช้ของคุณ!):

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

    สิ่งนี้เปลี่ยนการอนุญาตของโฟลเดอร์ย่อยที่ใช้โดย npm และเครื่องมืออื่น ๆ ( lib / node_modules , binและshare )

ตัวเลือกที่ 2: เปลี่ยนไดเรกทอรีเริ่มต้นของ npm เป็นไดเรกทอรีอื่น

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

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

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

    mkdir ~/.npm-global
  2. กำหนดค่า npm เพื่อใช้เส้นทางไดเรกทอรีใหม่:

    npm config set prefix '~/.npm-global'
  3. เปิดหรือสร้างไฟล์ ~ / .profile และเพิ่มบรรทัดนี้:

    export PATH=~/.npm-global/bin:$PATH
  4. กลับไปที่บรรทัดรับคำสั่งอัพเดตตัวแปรระบบของคุณ:

    source ~/.profile

1
ขอบคุณหนึ่งนี้ทำงานสำหรับฉันเป็นความ soludion chown ไม่ได้ คุณช่วยฉันไว้.
fmquaglia

ฉันควรเปลี่ยนไปใช้ตัวเลือก 2 เท่านั้นถ้าฉันได้รับ / usr
อัลเบิร์ต Laure

ฉันชอบตัวเลือกของคำตอบนี้ 2 (1) ไม่มีช่องโหว่ด้านความปลอดภัยในการใช้ sudo (2) สงวนสถาปัตยกรรมสำหรับผู้ใช้รายอื่น (3) อ้างอิงเอกสารและ AND (4) มีบรรทัดคำสั่งที่จำเป็น รวมรายการ ขอบคุณสำหรับการเพิ่ม!
Tom Rose

ดังนั้นสิ่งที่เกิดขึ้นเมื่อคุณติดตั้งสิ่งที่ symlinked เข้า/usr/bin/? ตอนนี้เฉพาะผู้ใช้ของคุณสามารถเข้าถึงได้ คุณเข้าสู่ระบบในฐานะคนอื่นซึ่งยังไม่สามารถเข้าถึงได้เนื่องจากไฟล์ดังกล่าวอยู่ในไดเรกทอรีหลักของผู้ใช้รายอื่น!
ฟรานส์

นีซคนนี้ทำงานให้ฉัน ขอบคุณสำหรับคำอธิบายเพิ่มเติมจากคำสั่ง
FrankByte.com

12

ราวกับว่าเราต้องการคำตอบเพิ่มเติมที่นี่ แต่อย่างไรก็ตาม ..

Sindre Sorus มีคู่มือติดตั้งแพคเกจ npm ทั่วโลกโดยไม่ต้อง sudo บน OS X และ Linuxโดยสรุปวิธีการติดตั้งอย่างหมดจดโดยไม่ต้องยุ่งกับสิทธิ์:

นี่คือวิธีการติดตั้งแพ็กเกจทั่วโลกสำหรับผู้ใช้ที่กำหนด

  1. สร้างไดเรกทอรีสำหรับแพ็คเกจทั่วโลกของคุณ

    mkdir "${HOME}/.npm-packages"
  2. อ้างอิงไดเรกทอรีนี้สำหรับการใช้งานในอนาคตใน. bashrc / .zshrc ของคุณ:

    NPM_PACKAGES="${HOME}/.npm-packages"
  3. ระบุถึง npm ว่าจะเก็บแพคเกจที่ติดตั้งไว้ทั่วโลกไว้ที่ไหน ใน$HOME/.npmrcไฟล์ของคุณเพิ่ม:

    prefix=${HOME}/.npm-packages
  4. ตรวจสอบให้แน่ใจโหนดจะพบพวกเขา เพิ่มสิ่งต่อไปนี้ใน. bashrc / .zshrc ของคุณ:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
  5. ให้แน่ใจว่าคุณจะพบไบนารีและหน้าคนที่ติดตั้ง เพิ่มสิ่งต่อไปนี้ใน.bashrc/ ของคุณ.zshrc:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

ลองดูnpm-g_nosudoเพื่อทำตามขั้นตอนข้างต้นโดยอัตโนมัติ

ชำระเงินที่แหล่งที่มาของคู่มือนี้สำหรับการปรับปรุงล่าสุด


2
tx สำหรับการแก้ไข @AndyHayden :) แนะนำวิธีที่ฉันต้องการในความคิดเห็นด้านบน: ใช้ NVM! stackoverflow.com/a/24404451/1480391
ptim

ทางออกเดียวที่ทำงานสำหรับฉันที่ไม่เกี่ยวข้องกับการล้อเล่นเกี่ยวกับสิทธิ์ ฉันเกลียด NPM และความโง่เขลาของสิทธิ์งี่เง่า ขอบคุณสำหรับการแก้ปัญหา!
RyanNerd

8

TL; DR

ใช้sudo -iหรือsudo -Hเมื่อใช้งานnpm installเพื่อติดตั้งแพ็คเกจทั่วโลก

-

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

ดังนั้นนี่คือสิ่งที่เกิดขึ้นกับทุก ๆ คนที่เคยใช้npm:

  • ติดตั้งแพคเกจท้องถิ่นบางอย่างโดยไม่มีปัญหาในการใช้ npm install foo
  • ติดตั้งแพ็คเกจทั่วโลกโดยใช้sudo install -g foo-cliไม่มีปัญหา
  • พยายามติดตั้งแพคเกจท้องถิ่นด้วย npm install bar
  • รับความผิดหวังที่npmนักออกแบบตอนนี้คุณต้องไปchmodที่ไดเรกทอรีอีกครั้ง

เมื่อคุณใช้ตัวเลือก-iหรือ-Hกับ sudo, โฮมไดเร็กตอรี่ของคุณจะเป็นrootโฮมไดเร็กตอรี่. การติดตั้งใด ๆ ทั่วโลกจะแคชแพคเกจให้/root/.npmแทนแฟ้มที่ถือหุ้นroot/home/me/.npm

เพียงแค่ใช้sudo -iหรือsudo -Hเมื่อnpm installติดตั้งแพ็คเกจทั่วโลกและnpmปัญหาสิทธิ์ของคุณจะหายไป

สำหรับดี

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- คิวโวลต์npmคำตอบที่ได้รับการยอมรับสำหรับการแก้ไขระยำแล้ว


การแก้ไขที่ดีที่สุดและเรียบง่าย
Manjeet Singh

6

ผมมีปัญหาที่คล้ายกันในโมดูล NPM จะไม่ติดตั้งทั่วโลกโดยไม่ต้อง sudoปัญหาก็คือว่าเมื่อฉันติดตั้งโหนดฉันไม่ได้กับ sudo ผ่านทางคริส / ทุ่ ppa repo

ทางออกของฉันคือการถอนการติดตั้งโหนดและติดตั้งด้วยวิธีนี้:

ดาวน์โหลดซอร์สโหนดที่เสถียรล่าสุดจาก nodejs.org #in my node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #uncompress ซอร์ส

cd node-v0.10.20 #enter โฟลเดอร์ที่ไม่มีการบีบอัด

sudo chown $ USER -R / usr / local

./configure --prefix = / usr / local && make && ทำการติดตั้ง

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

mkdir ~ / เลือก

./configure --prefix = ~ / opt && ทำการ && ทำการติดตั้ง

echo 'export PATH = ~ / opt / bin: $ {PATH}' >> ~ / .bashrc # หรือ ~ / .profile หรือ ~ / .bash_profile หรือ ~ / .zshenv ขึ้นอยู่กับระบบปฏิบัติการปัจจุบัน

ด้วยวิธีใดวิธีหนึ่งเหล่านี้คุณจะสามารถทำสิ่งต่อไปนี้ได้โดยไม่ต้องใช้ sudo

npm install -g module_to_install


1
ฉันลงเอยด้วยการใช้วิธีนี้ ใช้sudo chown $USER /use/localก่อนสร้าง ดูดีจนถึงเวลาที่จะสร้างอะตอม! ขอบคุณ!
prasanthv

6

เมื่อคุณรัน npm install -g somepackage คุณอาจได้รับข้อผิดพลาด EACCES ที่ขอให้คุณเรียกใช้คำสั่งอีกครั้งในฐานะ root / ผู้ดูแลระบบ มันเป็นปัญหาสิทธิ์

มันเป็นเรื่องง่ายที่จะแก้ไขให้เปิดสถานีของคุณ (Applications> Utilities> เทอร์)

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

** ฉันขอแนะนำให้คุณอย่าใช้การจัดการแพ็คเกจด้วย sudo (sudo npm -g ติดตั้งบางอย่าง) เพราะคุณจะได้รับปัญหาในภายหลัง **

การอ้างอิง: http://foohack.com/2010/08/intro-to-npm/


เย้! อันนี้ทำกับฉันแล้ว! หลังจากทำคนอื่น ๆ อื่น ๆ ข้างต้นsudo chown -R `whoami` ~/.npm, sudo chown -R `whoami` /usr/local/libและ
Regis Zaleman

8
นี่อาจทำให้เกิดปัญหาสิทธิ์อนุญาตกับแอพอื่น ๆ มากมายดังนั้นฉันขอแนะนำไม่ให้ทำเช่นนี้ ทำไมเวิร์มหนึ่งทำการค้าขายกับเวิร์มอื่นได้?
Brad Parks

1
หรืออย่างน้อยก็ปรับแต่งเป็น / usr / local / lib / node_modules
Ken

นี่นี่และสิ่งนี้มากกว่านี้ หลังจากทุบหัวของฉันกับกำแพงสิ่งนี้ก็หลอก +1
dashard

นี่คือปัญหาของฉัน สำหรับ macbook ใหม่ (os x 10.10.3) การอนุญาตบน / usr / local / lib / node_modules มีดังนี้: $ ll / usr / local / lib / node_modules รวม 0 drwxr-xr-x 3 24561 wheel 102B 31 มี.ค. 1919 . drwxrwxr-x 4 24561 ผู้ดูแลระบบ 136B 31 มี.ค. 18:19 .. drwxr-xr-x 26 65534 พนักงาน 884B 13 เม.ย. 10:53 น.
tkane2000

5

สำหรับ Mac (นำมาจากคำตอบของ Christoper Will)

Mac OS X 10.9.4

  1. ค่ากำหนดของระบบ> ผู้ใช้ & กลุ่ม> (ปลดล็อค)> กด +:

    บัญชีใหม่>
    ชื่อบัญชี"กลุ่ม" : nodegrp

    หลังจากสร้างกลุ่มให้เลือกผู้ใช้ที่จะรวมไว้ในกลุ่มนี้

  2. sudo chgrp -R nodegrp / usr / local / lib / node_modules /
    sudo chgrp nodegrp / usr / bin / โหนด
    sudo chgrp nodegrp / usr / bin / npm
    sudo chown -R $ (whoami): nodegrp ~ / npm


1
ฉันต้องเปลี่ยนสองพา ธ เป็น / usr / local / bin แต่นอกเหนือจากนั้นโซลูชันนี้ใช้งานได้ดีกับเครื่อง OX X 10.9 ของฉัน - ขอบคุณ!
splig

แนวปฏิบัติที่ไม่เหมาะสมในการเปลี่ยนความเป็นเจ้าของไดเรกทอรีระบบ
รวย remer

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

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

4

ในกรณีของฉันมันเป็นเพราะได้รับอนุญาตจาก ~ / tmp ดังนั้นฉันจะทำ:

sudo chown -R $USER ~/tmp

และมันก็โอเค!


4

สำหรับฉันรันเท่านั้น

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

ไม่ทำงาน จากนั้นฉันก็ดำเนินการเช่นกัน

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

และใช้งานได้ดี!


คุณเป็นคนที่ยอดเยี่ยมมาก :)
user805981

ไฟล์ใน/usr/libนั้นเป็นไฟล์ระบบและไม่ควรเป็นเจ้าของโดยบัญชีผู้ใช้ส่วนบุคคลของคุณ
รวย remer

4

ปัญหาประเด็น : คุณ (ผู้ใช้) ไม่มีสิทธิ์ที่เหมาะสมสำหรับไดเรกทอรี

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

และการเปลี่ยนความเป็นเจ้าของไดเรกทอรีไม่ใช่ตัวเลือกที่ดีเป็นตัวแก้ไขชั่วคราว


ทางออก / คำแนะนำ : เปลี่ยนไดเรกทอรีเริ่มต้นของ npm (จากเอกสารอย่างเป็นทางการ )

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

(ไม่บังคับ) ในกรณีที่คุณติดตั้งผิดพลาดให้ถอนการติดตั้งก่อน:

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. สร้างไดเรกทอรีสำหรับการติดตั้งทั่วโลก:

    mkdir ~/.npm-global

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

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

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

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

  4. กลับไปที่บรรทัดรับคำสั่งอัพเดตตัวแปรระบบของคุณหรือรีสตาร์ทเทอร์มินัล:

    source ~/.profile

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

    npm install -g jshint


3

ในกรณีที่sudo chown -R $(whoami) ~/.npmไม่ได้ผลสำหรับคุณหรือคุณต้องการโซลูชันคำสั่งที่ไม่ใช่เทอร์มินัล

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

  1. เปิดเครื่องมือค้นหาแล้วกดcmd+ shift+ gจะเป็นการเปิดโฟลเดอร์ที่มี url

  2. เขียนพา ธ ต่อไปนี้/usr/local/lib/node_modulesแล้วกด go

  3. คลิกขวาที่node_modulesโฟลเดอร์และเลือกGet Info

  4. เลื่อนลงไปที่sharing & permissionsส่วน

  5. ปลดล็อคเพื่อให้สามารถทำการเปลี่ยนแปลง

  6. กด+และเพิ่มบัญชีผู้ใช้ของคุณ

  7. ตรวจสอบให้แน่ใจว่าคุณได้เลือกRead & Writeสิทธิ์แบบเลื่อนลง

ตอนนี้คุณควรจะสามารถติดตั้งแพคเกจโดยไม่ต้องsudoและปัญหาการอนุญาตควรได้รับการแก้ไข


3

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

การแก้ไข: อนุญาตการอนุญาตสำหรับ npm

เปิดเทอร์มินัล:

command + spacebar จากนั้นพิมพ์ 'terminal'

ป้อนคำสั่งนี้:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • หมายเหตุ: จะต้องใช้รหัสผ่านของคุณ

วิธีการแก้ปัญหานี้อนุญาตให้เฉพาะไดเรกทอรีที่จำเป็นเท่านั้นทำให้ไดเรกทอรีอื่น ๆ ดีและปลอดภัย


Downvoting เนื่องจากการตั้งค่าความเป็นเจ้าของของผู้ใช้ของโฟลเดอร์ระบบเป็นรูปแบบการต่อต้านและสิ่งนี้ไม่ได้คำนึงถึงสิ่งนั้น ในกรณีพิเศษที่npm config get prefixส่งคืนบางสิ่งในโฟลเดอร์ภายในบ้านโซลูชันนี้จะแก้ไขสิทธิ์ แต่ไม่ได้แก้ไขปัญหาพื้นฐานของการติดตั้งแพคเกจส่วนกลางในวิธีที่ปลอดภัยสำหรับสภาพแวดล้อมที่ใช้ร่วมกัน
รวย remer

สิ่งนี้จะเขียนการอนุญาตของระบบปฏิบัติการส่วนใหญ่อีกครั้ง ตัวอย่างเช่นการใช้งานใน Ubuntu จะส่งผลให้คำสั่ง "sudo" ไม่สามารถใช้งานได้
Sahand Seifi

2

แก้ไขที่ยอดเยี่ยมอื่นที่นี่เพื่อกำหนดค่า NPM อย่างถูกต้องเรียกใช้คำสั่งต่อไปนี้

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

2

คุณสามารถลองใช้งานได้กับ Ubuntu และ Mac

sudo chown -R $(whoami) /usr/local/lib/node_modules

1
ฉันทำงานนี้และทำงานได้ 100% สำหรับฉันบน mac: sudo chown -R $ (whoami) / usr / local / lib / node_modules
leeroya

1

สิ่งที่ฉันดูเหมือนว่าเป็นตัวเลือกที่ดีที่สุดคือคนที่แนะนำในเอกสาร NPMซึ่งก็คือการตรวจสอบครั้งแรกที่ node_modules npm config get prefixทั่วโลกมีการติดตั้งโดยค่าเริ่มต้นด้วยการวิ่ง ถ้าคุณได้รับเหมือนที่ฉันทำกับ Trusty/usrคุณอาจต้องการเปลี่ยนเป็นโฟลเดอร์ที่คุณสามารถเป็นเจ้าของได้อย่างปลอดภัยโดยไม่ต้องทำสิ่งต่าง ๆ ตามที่ฉันทำ

ในการทำเช่นนั้นเลือกหรือสร้างโฟลเดอร์ใหม่ในระบบของคุณ คุณอาจต้องการมีไว้ในโฮมไดเร็กตอรี่ของคุณหรืออย่างฉัน/usr/localเพราะฉันเป็นผู้ใช้ Mac (ฉันไม่ต้องการมองเข้าไปในสถานที่ที่แตกต่างกันขึ้นอยู่กับเครื่องที่ฉันอยู่ข้างหน้า) อีกเหตุผลที่ดีในการทำเช่นนั้นก็คือความจริงที่ว่า/usr/localโฟลเดอร์น่าจะอยู่ใน PATH ของคุณอยู่แล้ว (เว้นแต่คุณต้องการที่จะยุ่งกับ PATH ของคุณ) แต่โอกาสที่จะเกิดขึ้นคือโฟลเดอร์ที่คุณเพิ่งสร้าง เส้นทางตัวเองบน.bash รายละเอียดหรือ.bashrcไฟล์

เรื่องสั้นสั้นฉันเปลี่ยนตำแหน่งเริ่มต้นของโมดูลทั่วโลกด้วยnpm config set prefix '/usr/local'สร้างโฟลเดอร์/usr/local/lib/node_modules(จะถูกใช้โดย npm) และเปลี่ยนสิทธิ์สำหรับโฟลเดอร์ที่ใช้โดย npm ด้วยคำสั่ง:

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

ตอนนี้คุณสามารถติดตั้งโมดูลใด ๆ ได้อย่างปลอดภัยทั่วโลก หวังว่านี่จะช่วยได้!


1

นี่คือวิธีที่ฉันแก้ไขปัญหาบน Windows 8.1:

  • ไปที่การติดตั้ง nodejs ของคุณ (โดยปกติคือ C: \ Program Files \ nodejs)
  • คลิกขวาที่โฟลเดอร์ node_modules และไปที่คุณสมบัติ
  • คลิกที่แท็บ Security และขั้นสูง
  • ที่ด้านบนคุณจะเห็น "เจ้าของ: ระบบ" คลิกเปลี่ยน
  • ป้อนผู้ใช้ที่คุณต้องการการอนุญาตและคลิกตกลง
  • ทำเครื่องหมายที่ช่องด้านล่างของการตั้งค่าขั้นสูง "แทนที่รายการสิทธิ์ของวัตถุลูกทั้งหมดด้วยรายการสิทธิ์ที่สืบทอดได้จากวัตถุนี้" และคลิกตกลง
  • ทำทุกอย่างเพื่อติดตั้ง / อัพเดทตามที่คุณต้องการ

1

ทางออกที่ดีที่สุดจะเป็นสิ่งนี้ซึ่งจัดทำโดยเอกสาร NPM


สำหรับ Ubuntu ทางออกที่แนะนำคือOption # 2

ขั้นตอนสั้น ๆ :
สร้างไดเรกทอรีสำหรับการติดตั้งทั่วโลก:
mkdir ~/.npm-global

กำหนดค่า npm ให้ใช้เส้นทางไดเรกทอรีใหม่: สามารถช่วยคุณตรวจสอบว่ามีการปรับปรุงคำนำหน้าหรือไม่ ผลลัพธ์จะเป็น <ไดเรกทอรีภายในบ้านของคุณ> /. npm-global
npm config set prefix '~/.npm-global'
npm config get prefix

เปิดหรือสร้างไฟล์ ~ / .profile และเพิ่มบรรทัดนี้:
export PATH=~/.npm-global/bin:$PATH

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

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

NPM_CONFIG_PREFIX=~/.npm-global


สำหรับวิธีแก้ปัญหาที่แนะนำสำหรับ Mac คือตัวเลือก # 3

บน Mac OS คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้ Homebrew package manager

brew install node


NPM_CONFIG_PREFIX นี้จะไม่ทำงาน นี่เป็นข้อผิดพลาดใน npm-descriptiton ดูโพสต์ของฉันด้านบนวิธีการทำในทางที่ถูกต้อง: stackoverflow.com/a/41395398/1256697
suther

1

ฉันแก้ไขได้โดยเปลี่ยนเจ้าของจากรูทเป็นชื่อผู้ใช้ของฉัน

sudo chown -R me:me /home/me/.config/configstore/

เปลี่ยนฉันด้วยชื่อผู้ใช้และกลุ่มของคุณ


1

ฉันชอบที่จะใช้กลุ่มอูบุนตูเพื่อให้บรรลุเป้าหมายนี้แทนที่จะเปลี่ยนเจ้าของ มันค่อนข้างง่าย

  1. ติดตั้ง nodejs และ npm เป็นครั้งแรกโดยใช้ apt-get

    sudo apt-get update && sudo apt-get install nodejs npm

  2. คิดออกว่าใครเข้าสู่ระบบคือชื่อผู้ใช้เรียกใช้คำสั่งต่อไปนี้เพื่อดูใน terminal

    whoami

  3. คุณสามารถดูรายการกลุ่มที่คุณได้รับมอบหมายโดยใช้คำสั่งง่าย ๆ โดยปกติกลุ่มแรกคือชื่อผู้ใช้ของคุณเอง

    groups

  4. เรียกใช้การติดตามเพื่ออนุญาตการเข้าถึงผู้ใช้ที่ล็อกอิน

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. อัพเดต npm และ nodejs

    npm install -g npm

คุณได้รับการกำหนดแล้วผู้ใช้ของคุณสามารถเรียกใช้คำสั่ง npm โดยไม่ต้อง sudo

คุณยังสามารถอ้างถึงลิงค์นี้ได้ที่https://askubuntu.com/a/1115373/687804


0

บน Mac OS X เมื่อติดตั้งด้วยHomebrew brew install npmเส้นทางการติดตั้งจะ/usr/local/share/npm/มีทั้งbin/และlib/node_modules/โฟลเดอร์ย่อย

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

sudo chown -R $USER ~/.npm /usr/local/share/npm/


1
ทุกวันนี้จะแนะนำคำตอบอื่น ๆ ของฉันสำหรับคำถามนี้ที่ใช้npm configแทน
Joel Purra

0

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

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

หลังจากนั้นก็ทำงานได้ดี!


0

John Papa ชี้ไปที่ประวัติศาสตร์และการให้เหตุผลเบื้องหลังปัญหานี้และให้การแก้ไขที่มั่นคง :

ขั้นตอนของ John Papa คือ:

  1. ใช้ชงเพื่อติดตั้งโหนดโดยไม่ต้องใช้ NPM
  2. อัพเดต. bash_profile / .bashrc ของคุณเพื่อให้ npm และโหนดทราบตำแหน่งที่จะติดตั้งและค้นหาแพ็กเกจ
  3. ใช้ Brew เพื่ออัพเดตโหนดและ npm เพื่ออัพเดตตัวเอง

หวังว่านี่จะช่วยให้อยากรู้อยากเห็น!


0

นี่คือทางออกที่ฉันใช้และทำงานอยู่ ฉันพยายามใช้whoamiไม่เคยทำงาน

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

แล้วก็

sudo chown -R $USER /usr/local/bin/npm

แล้วก็

sudo chown -R $USER /usr/local/bin/node


0

คำตอบของ @Yves M. นั้นคล้ายกับโซลูชันของฉันมาก นี่คือคำสั่งที่ฉันใช้ซึ่งแตกต่างจากเขาเล็กน้อย

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

จากนั้นสอบถามรุ่นล่าสุด:

nvm ls-remote

จากนั้นติดตั้งเวอร์ชันใหม่ล่าสุด:

nvm install YOUR_VERSION_HERE

ตัวอย่าง

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