คำนำหน้าเส้นทางทั่วโลก NPM


142

ฉันระมัดระวังมากกว่าปกติเพราะฉันเคยสับสนกับพฤติกรรมของnpmในอดีต

ฉันใช้งานบน Mac และได้ติดตั้ง node.js ผ่านbrew install nodeแล้ว

ตอนนี้ฉันต้องการที่จะทำงานjslint.jsบนบรรทัดคำสั่งเป็นคำสั่งที่jslintฉันพบว่าวิธีบัญญัติของฉันที่จะบรรลุสิ่งนี้sudo npm install -g jslintซึ่งประสบความสำเร็จในการทำงานกับผลลัพธ์นี้:

$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)

ต่อมา

$ jslint ply.js
zsh: command not found: jslint

เนื่องจากไม่ได้อยู่ในของฉัน/usr/local/share/npm/bin$PATH

1) ทำไมbrewไม่ติดตั้งโกลบอลnpm binพา ธ ไปยังพา ธ อาจเป็นไปได้ แต่มีบางอย่างที่zshทำให้มันยุ่งเหยิง ฉันจะหาได้ที่ไหน
2) ฉันควรทำสิ่งนี้หรือไม่? (ต่อท้าย:/usr/local/share/npm/binการส่งออก$PATHที่ด้านล่างของฉัน~/.zshrc)

ดูเหมือนว่านี่ไม่ใช่วิธีที่ถูกต้องที่จะทำเพราะถ้าฉันติดตั้งอย่างอื่นในภายหลัง (ใช้ Homebrew หรืออะไรบางอย่าง) ฉันจะต้องผนวกมันลงในสคริปต์เริ่มต้น zsh ของฉันเพื่อตั้งค่าเส้นทาง ฉันเดาในกรณีพิเศษนี้เป็นเพียงเรื่องของการnpm install -gไม่ทำ symlink ที่ถูกต้องในตำแหน่ง "เหมาะสม" (เช่น/usr/local/binอาจจะ)

ฉันคิดว่าสิ่งที่ฉันจะทำคือสร้าง symlink ในตัวเอง/usr/local/binสำหรับโปรแกรมใด ๆ ที่ฉันมีปัญหาและควรดีพอสำหรับวัตถุประสงค์ของฉัน

แก้ไข : ฉันกำลังอัปเดตในปี 2562 เพราะคำถามเก่านี้เป็นที่นิยม แต่ตอนนี้ล้าสมัยทั้งในแง่ของเวิร์กโฟลว์ส่วนตัวของฉันและในแง่ของวิธีการติดตั้งโหนดและจัดการการพึ่งพาต่างๆที่ดีที่สุด

เวิร์กโฟลว์ส่วนตัวของฉันคือการใช้ตัวติดตั้งที่ได้รับจาก nodejs.org เพื่อติดตั้งโหนดบนระบบ ฉันเชื่อใจตัวเองมากกว่าแพ็คเกจ homebrew เพราะรู้วิธีจัดการไฟล์ได้ดีที่สุด หากคุณต้องการเปลี่ยนโหนดระบบของคุณจาก 8.10 เป็น 10.15 ไม่ว่าจะเป็นบน Mac หรือ Windows เพียงดาวน์โหลดตัวติดตั้งจาก nodejs.org สำหรับ 10.15 สำหรับระบบปฏิบัติการของคุณ ความพยายามในการอัปเกรดโหนดที่ติดตั้งผ่าน homebrew ได้พิสูจน์แล้วว่าเป็นวิธีที่ยากขึ้นในประสบการณ์ของฉัน

นอกจากนี้สิ่งที่ยิ่งใหญ่ที่สุดที่จะชี้ให้เห็นคือการใช้ sudo ดังที่แสดงในการติดตั้งตัวอย่าง jslint ของฉันในเวลา 17.00 น. เป็นสิ่งที่ไม่น่าไว้วางใจอย่างมาก ฉันค่อนข้างแน่ใจว่าแพ็คเกจ homebrew ไม่ควรติดตั้งหรือมีปฏิสัมพันธ์กับผู้ใช้ superuser ไม่ควรจำเป็นและจะนำไปสู่การปวดหัวการอนุญาต!

นอกจากนี้ฉันแนะนำ ESLint มากกว่า jslint และไม่ได้ใช้ jslint เป็นเวลาหลายปี


ขอบคุณพวกเขาได้รับการแก้ไขแล้ว ฉันมักจะไม่ประมาท แต่ฉันพิมพ์คำถามนี้เร็วมาก
Steven Lu

@ DaveNewton ฉันมักจะทำอย่างนั้นใช่ คำถามนี้เป็นคำถามที่เลอะเทอะจริง แต่เป็นคำถามยอดนิยมข้อหนึ่งของฉัน
Steven Lu

คัดลอกข้อความง่ายกว่าการสกรีน คงอยู่แล้ว

1
@ saleemrashid1 ​​เฮ้ฉันหมายถึงทำสิ่งนี้แล้ว คุณอ่านและคัดลอกออกมาจริงๆเหรอ? ขอบคุณ
Steven Lu

3
อ้อ! ไม่เป็นไร ฉันทำงานเกมและในขณะที่ฉันกำลังรอให้ NPM ดาวน์โหลดสิ่งที่ฉันทำ!

คำตอบ:


308

การขยายของคุณPATHด้วย:

export PATH=/usr/local/share/npm/bin:$PATH

ไม่ใช่ความคิดที่แย่ ต้องบอกว่าคุณไม่ควรทำ

เรียกใช้สิ่งนี้:

npm config get prefix

ค่าเริ่มต้นใน OS X คือ/usr/localซึ่งหมายความว่า npm จะ symlink ไบนารีเข้า/usr/local/binซึ่งควรจะอยู่ในของคุณแล้วPATH(โดยเฉพาะถ้าคุณใช้ Homebrew)

ดังนั้น:

  1. npm config set prefix /usr/local ถ้ามันเป็นอย่างอื่นและ
  2. อย่าใช้sudoกับ npm! อ้างอิงถึงเอกสาร JSLintคุณก็ควรจะสามารถnpm installมัน

หากคุณติดตั้ง NPM เป็น sudo ( sudo brew install) ลองติดตั้งกับ OL brew installธรรมดา' Homebrew ควรจะช่วยให้คุณsudoไม่ต้องเสียเงิน


1
ขอบคุณ! npmปฏิเสธที่จะติดตั้งjslintทั่วโลกแม้ว่า npm install -g jslintล้มเหลว Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
Steven Lu

2
ฉันจะไม่จำเป็นต้องใช้หรือไม่chown /usr/localถ้าฉันมีสคริปต์ใด ๆ ที่เขียนลิงค์ลงไปโดยไม่จำเป็นต้องใช้sudo? วิธีการเกี่ยวกับสิ่งนี้เพื่อตั้งชื่อ / โหนดขึ้น~/.localหรืออะไร?
Steven Lu

2
หวาน! ฉันไปและยกเลิกการ dirs ต่าง ๆ ที่ฝากโดยผู้ใช้rootใน~/dir ของฉัน(โดยsudo rm -rบนtmp/และ a .npm/) และต่อมาnpm install -g jslintทำงานอย่างสวยงาม เป็นระเบียบเรียบร้อยที่ npm นั้นเป็นโปรแกรมโหนดและเป็นบิตของหลักฐานบรรทัดคำสั่ง JS ของแนวคิดสำหรับฉันซึ่งฉันเริ่มชื่นชมตอนนี้ที่ฉันเข้าใจมันดีขึ้นเล็กน้อย
Steven Lu

2
@StevenLu อ๋อ, chown-ing /usr/localและทุกอย่างในนั้นเป็นแบบฝึกหัดมาตรฐานใน OS X ดูหน้าการแก้ไขปัญหาบน Homebrew wiki
เทรเวอร์เบิร์นแฮม

อ้อดูเหมือนว่าchownไอเอ็นจีของ/usr/localได้เกิดขึ้นแล้วในเครื่องของฉันเป็นอย่างอื่นnpmet al, วิ่งโดยไม่sudoจะไม่สามารถที่จะฝากเงินการเชื่อมโยงเข้าสู่/usr/local/bin/ฯลฯ
สตีเว่น Lu

8

ใช้เวลาสักครู่ในปัญหานี้และสวิตช์ PATH ไม่ได้ช่วยอะไร ปัญหาของฉันคือข้อผิดพลาด Homebrew / node / npm ที่นี่ - https://github.com/npm/npm/issues/3794

หากคุณติดตั้งโหนดโดยใช้ Homebrew แล้วให้ลองใช้ **** ต่อความคิดเห็นว่าสิ่งนี้อาจไม่ปลอดภัย มันได้ผลสำหรับฉัน แต่อาจมีผลที่ไม่ตั้งใจ นอกจากนี้ยังปรากฏว่า Homebrew เวอร์ชันล่าสุดติดตั้งอย่างเหมาะสม npm ดังนั้นมีแนวโน้มที่ผมจะพยายามbrew update, brew doctor, brew upgrade nodeฯลฯ ก่อนที่จะพยายาม ****:

npm update -gf

หรือถ้าคุณต้องการติดตั้งโหนดด้วย Homebrew และใช้งาน npm ได้ให้ใช้:

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh

3
แนะนำโดยทั่วไปว่าผู้คนทั่วโลกบังคับให้อัปเดตไม่ใช่ความคิดที่ดี
toxaq

1
การทำตามคำแนะนำจากคนที่อยู่บนอินเตอร์เน็ตอย่างไม่รู้ตัวนั้นไม่ใช่ความคิดที่ดี
Volte

วิธีการบังคับกับ -gf ทำให้ฉัน ขอบคุณ.
MEM

5

ฉันใช้ชงและคำนำหน้าถูกตั้งค่าเป็น:

$ npm config get prefix
/Users/[user]/.node

ฉันสังเกตว่าโฟลเดอร์ bin และ lib นั้นเป็นเจ้าของโดย root ซึ่งป้องกันการติดตั้งไม่ใช่ sudo ปกติดังนั้นฉันจึงเป็นเจ้าของพวกเขาอีกครั้งให้กับผู้ใช้

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin

จากนั้นฉันเพิ่งเพิ่มเส้นทางไปยัง. bash_profile ซึ่งตั้งอยู่ที่ / Users / [ผู้ใช้]

PATH=$PATH:~/.node/bin

3

ผู้สร้างไม่ควรกำหนดให้คุณใช้ sudo แม้เมื่อใช้ npm ด้วย -g นี่อาจทำให้เกิดปัญหามากขึ้นตามถนน

โดยทั่วไปชงหรือพอร์ตช่วยให้คุณอัปเดตเส้นทางของคุณดังนั้นจึงไม่มีความเสี่ยงที่จะทำให้สับสน. zshrc, .bashrc, .cshrc หรือรสชาติของเปลือกหอยที่คุณใช้


sudoอันที่จริงการชงไม่ต้องแนะนำและต่อต้านการใช้ ฉันใช้ sudo บนnpm(เพราะบางสิ่งที่ฉันอ่านบอกฉันไป) ฉันอยากรู้ว่าจะค้นหาเส้นทางได้อย่างไร ดูเหมือนว่าจริงแล้วตัวzshติดตั้งจะทำงานบางอย่างที่ทำให้ฮาร์ดโค้ด (ในเวลาที่ติดตั้งzsh) กลายเป็นสิ่ง.zshrcที่ฉันไม่ชอบมาก
Steven Lu

สิ่งใดติดตั้งโดยnpm ควร/usr/localจะติดตั้งใน /usrnamespace เส้นทางถูกสงวนไว้สำหรับแพคเกจอย่างเป็นทางการ distro ของคุณ /usr/local/binใน $ PATH ของคุณหรือไม่เป็นปัญหา zsh
Floby

สคริปต์การสร้างไม่เพิ่มสิ่งใด ๆ ลงในสคริปต์เริ่มต้นของคุณนี่เป็นสิ่งที่คุณต้องทำ ดูmadebyhoundstooth.com/blog/install-node-with-homebrew-on-os-xสำหรับตัวอย่าง
Pascal Belloncle

2

ฉันจัดการเพื่อแก้ไขข้อผิดพลาดคำสั่ง Vue Cli โดยทำดังต่อไปนี้:

  • ในอาคารผู้โดยสาร sudo nano ~/.bash_profileเพื่อแก้ไขโปรไฟล์ทุบตีของคุณ
  • เพิ่ม export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • บันทึกไฟล์และรีสตาร์ทเทอร์มินัล
  • ตอนนี้คุณควรจะสามารถใช้vue create my-projectและvue --versionอื่น ๆ

ฉันทำสิ่งนี้หลังจากติดตั้ง Vue Cli ล่าสุดแล้ว https://cli.vuejs.org/

ฉันมักจะใช้เส้นด้าย แต่ฉันติดตั้งนี้ทั่วโลกด้วย npm npm install -g @vue/cliNPM คุณสามารถใช้ไหมพรมได้หากต้องการyarn global add @vue/cli

หมายเหตุ: คุณอาจต้องถอนการติดตั้งก่อนหากคุณติดตั้งไว้แล้ว: npm uninstall -g vue-cli

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


1
สิ่งนี้ใช้ได้ผลสำหรับฉัน ฉันต้องปรับมันเพื่อส่งออก PATH = $ PATH: / Users / [ชื่อผู้ใช้ของคุณ] /node_modules/.bin
Mike Carpenter ไมค์

1

บุคคลใดก็ตามที่มีปัญหาเดียวกันเกี่ยวข้องกับความขัดแย้งระหว่างผู้ผลิตและผู้ดูแลระบบโปรดตรวจสอบโซลูชันนี้https://gist.github.com/DanHerbert/9520689


0

ลองใช้:

PATH=$PATH:~/npm/bin

จากนั้นทำการทดสอบโดยรันexpressในบรรทัดคำสั่ง สิ่งนี้ใช้ได้สำหรับฉัน


ค่อนข้างแน่ใจว่าคุณหมายถึง~/.npm/binหรือบางอย่าง ไม่ควรมีnpmdir เพิ่มไว้ใน dir ที่บ้านของคุณ
Steven Lu

0

หากคุณเชื่อมโยงแพ็กเกจโหนดโดยใช้คำสั่ง sudo

จากนั้นไปที่โฟลเดอร์ที่ติดตั้ง node_modules แบบโกลบอล

บนระบบ Unix โดยปกติแล้วจะอยู่ใน / usr / local / lib / node หรือ / usr / local / lib / node_modules เมื่อติดตั้งแบบโกลบอล หากคุณตั้งค่าตัวแปรสภาวะแวดล้อม NODE_PATH เป็นพา ธ นี้โมดูลสามารถพบได้โดยโหนด

Windows XP -% USERPROFILE% \ Application Data \ npm \ node_modules Windows 7 -% AppData% \ npm \ node_modules

จากนั้นเรียกใช้คำสั่ง

ls -l

สิ่งนี้จะให้รายการของโหนดโกลบอลทั้งหมดและคุณสามารถดูโมดูลโหนดที่ลิงก์ได้อย่างง่ายดาย


0

sudo brew ไม่มีตัวเลือกอีกต่อไปดังนั้นหากคุณติดตั้งด้วยการชงที่จุดนี้คุณจะได้รับ 2 สิ่งที่น่ารังเกียจจริงๆ: A: มันชอบที่จะติดตั้ง/usr/local/optsหรือตามนี้ / usr / local / shared นี่ไม่ใช่เรื่องใหญ่ในตอนแรก แต่ฉันมีปัญหากับโหนด PATH โดยเฉพาะอย่างยิ่งเมื่อฉันติดตั้งผ้าสำลี B: คุณติดอยู่กับคำสั่ง sudo จนกว่าคุณจะถอนการติดตั้งและติดตั้งด้วยวิธีนี้หรือคุณจะได้สแต็คจากBitnami

ฉันแนะนำวิธีนี้เหนือตัวเลือกสแต็กเพราะมันพร้อมใช้งานถ้าคุณมีหลายโครงการ หากคุณไปกับกอง MEAN ที่สร้างไว้ล่วงหน้าคุณจะต้องตั้งค่าโฮสต์เสมือนใน httpd.conf (เจ็บปวดมากกว่าในสแต็กนี้กว่า XAMPP) โปรดอัปเดตปกติ / vhosts.conf และ / etc / hosts ของคุณทุก ๆ โปรเจ็กต์, ยกเว้นว่าคุณต้องการที่จะทำการรีสตาร์ตและรีสตาร์ทเซิร์ฟเวอร์ของคุณเมื่อคุณทำการอัพเดทสิ่งต่าง ๆ เสร็จสิ้น


0

วิธีง่ายๆคือ ...

เพียงแค่ใส่คำสั่งด้านล่าง:

  1. sudo npm config get prefix

    หากไม่ใช่สิ่งเหล่านี้/usr/localคุณจำเป็นต้องแก้ไขโดยใช้คำสั่งด้านล่าง

  2. sudo npm config set prefix /usr/local...

ตอนนี้มันทำงานได้ดี 100%


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