tiền tố đường dẫn toàn cầu npm


142

Tôi đang thận trọng hơn bình thường vì tôi đã bị nhầm lẫn bởi hành vi npmtrong quá khứ.

Tôi đang trên một máy Mac và đã cài đặt Node.js qua brew install node.

Bây giờ tôi muốn chạy jslint.jstrên dòng lệnh như lệnh jslinttôi thấy rằng cách chính tắc để thực hiện điều này là sudo npm install -g jslintchạy thành công với đầu ra này:

$ 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)

Sau đó

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

do /usr/local/share/npm/binkhông phải là ở tôi $PATH.

1) Tại sao brewkhông cài đặt npm binđường dẫn toàn cầu đến đường dẫn? Có lẽ nó đã làm, nhưng một cái gì đó zshđang làm nó rối tung lên. Tôi có thể tìm thấy nó ở đâu?
2) Tôi có nên làm điều này? (Nối :/usr/local/share/npm/binvào phần xuất khẩu $PATHở dưới cùng của tôi ~/.zshrc)

Có vẻ như đây không phải là cách đúng đắn để làm điều đó bởi vì nếu tôi cài đặt một cái gì đó khác sau này (sử dụng Homebrew hoặc một cái gì đó) tôi sẽ cần phải thêm nó vào tập lệnh khởi động zsh của mình để đặt đường dẫn. Tôi đoán trong trường hợp cụ thể này, đó chỉ là vấn đề npm install -gkhông tạo ra các liên kết chính xác ở một vị trí "thích hợp" (như /usr/local/bincó thể).

Tôi nghĩ rằng những gì tôi sẽ làm là tự xây dựng các liên kết tượng trưng /usr/local/bincho bất kỳ chương trình nào mà tôi gặp rắc rối và nó phải đủ tốt cho mục đích của tôi.

EDIT : Tôi đang cập nhật điều này vào năm 2019, bởi vì câu hỏi cũ này rất phổ biến nhưng hiện đã lỗi thời cả về quy trình làm việc cá nhân của tôi và cả về cách tốt nhất để cài đặt nút và quản lý các phụ thuộc khác nhau của nó.

Quy trình công việc cá nhân của tôi bây giờ là sử dụng trình cài đặt thu được từ nodejs.org để cài đặt nút trên các hệ thống. Tôi thực sự tin tưởng điều này hơn chính gói homebrew, vì nó biết cách quản lý tốt nhất các tệp. Nếu bạn muốn thay đổi nút hệ thống của mình từ 8.10 thành 10.15, cho dù trên Mac hay Windows, chỉ cần tải xuống trình cài đặt từ nodejs.org cho 10.15 cho HĐH của bạn. Cố gắng nâng cấp nút được cài đặt qua homebrew luôn được chứng minh là một cách tiếp cận khó khăn hơn theo kinh nghiệm của tôi.

Ngoài ra, điều lớn nhất cần chỉ ra là việc sử dụng sudo như trong phần cài đặt jslint npm của tôi ở trên rất không được khuyến khích; Tôi khá chắc chắn rằng các gói homebrew không bao giờ nên được cài đặt hoặc tương tác với bất kỳ cách nào bằng cách sử dụng siêu người dùng. Nó không cần thiết, và sẽ dẫn đến đau đầu cho phép tập tin!

Hơn nữa, tôi khuyên bạn nên sử dụng ESLint trên jslint và đã không sử dụng jslint trong nhiều năm.


Cảm ơn, giờ họ đã sửa xong. Tôi không thường xuyên bất cẩn như vậy nhưng tôi đã gõ câu hỏi này rất nhanh
Steven Lu

@DaveNewton Tôi thường làm điều đó, yeah. Câu hỏi này là một câu hỏi cẩu thả thực sự nhưng nó là một trong những câu hỏi phổ biến nhất của tôi.
Steven Lu

không dễ sao chép văn bản hơn ảnh chụp màn hình? dù sao cũng đã sửa.

1
@ saleemrashid1 ​​Này, tôi có ý định làm điều này. Bạn đã thực sự đọc nó và sao chép nó ra? Cảm ơn.
Steven Lu

3
Vâng! Không có gì. Tôi đang làm việc trên một trò chơi và trong khi chờ NPM tải xuống, tôi đã làm điều đó!

Câu trả lời:


308

Mở rộng của bạn PATHvới:

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

không phải là một ý tưởng tồi tệ Đã nói rằng, bạn không cần phải làm điều đó.

Chạy cái này:

npm config get prefix

Mặc định trên OS X là /usr/local, điều đó có nghĩa là npm sẽ liên kết nhị phân vào /usr/local/bin, điều này đã có trên bạn PATH(đặc biệt là nếu bạn đang sử dụng Homebrew).

Vì thế:

  1. npm config set prefix /usr/local nếu đó là một cái gì đó khác, và
  2. Đừng sử dụng sudovới npm! Theo các tài liệu jslint , bạn sẽ có thể làm được npm install.

Nếu bạn đã cài đặt npm dưới dạng sudo ( sudo brew install), hãy thử cài đặt lại với đơn giản ol ' brew install. Homebrew được cho là sẽ giúp bạn tự do sudo.


1
Cảm ơn! npmtừ chối cài đặt jslinttrên toàn cầu, mặc dù. npm install -g jslintthất bại Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
Steven Lu

2
Tôi sẽ không cần chown /usr/localnếu tôi có bất kỳ kịch bản nào viết liên kết vào đó mà không yêu cầu sudo? Làm thế nào về việc làm theo điều này để thiết lập nom / nút lên ~/.localhoặc cái gì đó?
Steven Lu

2
NGỌT! Tôi đã đi và hoàn thành các thư mục khác nhau được gửi bởi người dùng roottrong ~/thư mục của tôi (bởi và sudo rm -rtrên ) và sau đó một công việc tuyệt vời. Thật gọn gàng khi bản thân npm là một chương trình nút và là một phần của khái niệm bằng chứng dòng lệnh JS đối với tôi mà tôi bắt đầu đánh giá cao bây giờ vì tôi hiểu nó tốt hơn một chút. tmp/.npm/npm install -g jslint
Steven Lu

2
@StevenLu Yep, chown-ing /usr/localvà mọi thứ trong đó là thông lệ tiêu chuẩn trên OS X. Xem trang xử lý sự cố trên wiki Homebrew.
Trevor Burnham

Đúng, có vẻ như việc chowning /usr/localđã xảy ra trên máy của tôi nếu không npmet al chạy mà sudokhông thể gửi liên kết vào /usr/local/bin/v.v.
Steven Lu

8

Đã dành một chút thời gian cho vấn đề này và công tắc PATH không giúp được gì. Vấn đề của tôi là lỗi Homebrew / node / npm được tìm thấy ở đây - https://github.com/npm/npm/issues/3794

Nếu bạn đã cài đặt nút bằng Homebrew, hãy thử **** Lưu ý cho mỗi nhận xét rằng điều này có thể không an toàn. Nó làm việc cho tôi nhưng có thể có những hậu quả không lường trước được. Nó cũng xuất hiện rằng phiên bản mới nhất của Homebrew cài đặt đúng npm. Vì vậy, nhiều khả năng tôi sẽ cố gắng brew update, brew doctor, brew upgrade nodevv trước khi cố gắng ****:

npm update -gf

Hoặc, nếu bạn muốn cài đặt nút với Homebrew và có npm hoạt động, hãy sử dụng:

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

3
Tình cờ khuyến nghị rằng mọi người trên toàn cầu buộc cập nhật không phải là một ý tưởng tốt.
toxaq

1
Mù quáng làm theo lời khuyên từ ai đó trên mạng quốc tế không phải là một ý tưởng tốt.
Volte

Phương pháp lực trên -gf đã làm cho tôi. Cảm ơn bạn.
MEM

5

Tôi sử dụng brew và tiền tố đã được đặt thành:

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

Tôi đã nhận thấy rằng thư mục bin và lib được sở hữu bởi root, điều này đã ngăn chặn cài đặt không sudo thông thường, vì vậy tôi đã sở hữu lại chúng cho người dùng

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

Sau đó, tôi vừa thêm đường dẫn đến .bash_profile của mình được đặt tại / Users / [user]

PATH=$PATH:~/.node/bin

3

brew không nên yêu cầu bạn sử dụng sudo ngay cả khi chạy npm với -g. Điều này thực sự có thể tạo ra nhiều vấn đề hơn trên đường.

Thông thường, brew hoặc port cho phép bạn cập nhật đường dẫn của mình để nó không có nguy cơ làm hỏng .zshrc, .bashrc, .cshrc hoặc bất kỳ hương vị nào của vỏ bạn sử dụng.


Thực tế bia không yêu cầu và đề nghị không sử dụng sudo. Tôi đã sử dụng sudo trên npm(vì một cái gì đó tôi đọc đã nói với tôi). Tôi tò mò về nơi để tìm cách thiết lập đường dẫn. Có vẻ như trình zshcài đặt chạy thứ gì đó kết thúc việc mã hóa đường dẫn (tại thời điểm cài đặt zsh) vào cái .zshrcmà tôi không thích lắm
Steven Lu

Bất cứ điều gì được cài đặt bởi npm nên được cài đặt trong /usr/local. Không /usrgian tên đường dẫn được dành riêng cho các gói chính thức của distro của bạn. /usr/local/bintrong $ PATH của bạn hay không, là một vấn đề zsh.
Floby

các tập lệnh brew không thêm bất cứ điều gì vào tập lệnh khởi động của bạn, đây là điều bạn cần làm. xem maditherhoundstooth.com/blog/install-node-with-homebrew-on-os-x để biết ví dụ.
Pascal Belloncle

2

Tôi đã cố gắng khắc phục Vue Cli không có lỗi lệnh bằng cách thực hiện như sau:

  • Trong thiết bị đầu cuối sudo nano ~/.bash_profile để chỉnh sửa hồ sơ bash của bạn.
  • Thêm vào export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • Lưu tập tin và khởi động lại thiết bị đầu cuối
  • Bây giờ bạn sẽ có thể sử dụng vue create my-projectvue --versionvv

Tôi đã làm điều này sau khi tôi cài đặt Vue Cli mới nhất từ https://cli.vuejs.org/

Tôi thường sử dụng sợi, nhưng tôi đã cài đặt nó trên toàn cầu với npm npm install -g @vue/cli . Bạn cũng có thể sử dụng sợi nếu bạn thíchyarn global add @vue/cli

Lưu ý: bạn có thể phải gỡ cài đặt nó trước trên toàn cầu nếu bạn đã cài đặt nó: npm uninstall -g vue-cli

Hi vọng điêu nay co ich!


1
Điều này về cơ bản làm việc cho tôi. Tôi đã phải điều chỉnh nó để xuất PATH = $ PATH: / Users / [tên người dùng của bạn] /node_modules/.bin
Mike Carpenter


0

Hãy thử chạy:

PATH=$PATH:~/npm/bin

và sau đó làm một bài kiểm tra bằng cách chạy expresstrong dòng lệnh. Điều này làm việc cho tôi.


khá chắc chắn bạn có nghĩa là ~/.npm/binhoặc một số như vậy. không nên có một npmthư mục được thêm vào thư mục nhà của bạn.
Steven Lu

0

Nếu bạn đã liên kết các gói nút bằng lệnh sudo

Sau đó đi đến thư mục nơi node_modules được cài đặt trên toàn cầu.

Trên các hệ thống Unix, chúng thường được đặt trong / usr / local / lib / node hoặc / usr / local / lib / node_modules khi được cài đặt trên toàn cầu. Nếu bạn đặt biến môi trường NODE_PATH cho đường dẫn này, các mô-đun có thể được tìm thấy theo nút.

Windows XP -% USERPROFILE% \ Dữ liệu ứng dụng \ npm \ node_modules Windows 7 -% AppData% \ npm \ node_modules

và sau đó chạy lệnh

ls -l

Điều này sẽ đưa ra danh sách tất cả các nút_modules toàn cầu và bạn có thể dễ dàng thấy các mô-đun nút được liên kết.


0

sudo brew không còn là một lựa chọn vì vậy nếu bạn cài đặt với brew vào thời điểm này, bạn sẽ nhận được 2 thứ thực sự đáng ghét: A: nó thích cài đặt vào /usr/local/optshoặc theo điều này, / usr / local / shared. Đây không phải là một vấn đề lớn lúc đầu nhưng tôi đã gặp vấn đề với nút PATH đặc biệt là khi tôi cài đặt lint. B: bạn bị mắc kẹt với các lệnh sudo cho đến khi bạn gỡ cài đặt và cài đặt nó theo cách này hoặc bạn có thể lấy ngăn xếp từ Bitnami

Tôi khuyên bạn nên sử dụng phương pháp này qua tùy chọn ngăn xếp vì nó sẵn sàng hoạt động nếu bạn có nhiều dự án. Nếu bạn đi với ngăn xếp MEAN có sẵn, bạn sẽ phải thiết lập máy chủ ảo trong httpd.conf (sẽ gây khó khăn hơn cho ngăn xếp này so với XAMPP), hãy cập nhật thông thường thêm / vhosts.conf và / etc / hosts dự án, trừ khi bạn muốn bổ sung và khởi động lại máy chủ của bạn khi bạn hoàn thành việc cập nhật.


0

Giải pháp đơn giản là ...

Chỉ cần đặt lệnh dưới đây:

  1. sudo npm config get prefix

    nếu nó không giống như thế này /usr/local, bạn cần sửa nó bằng lệnh bên dưới.

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

Bây giờ nó hoạt động tốt 100%


Rất khuyến khích tránh sudo với npm. Xem chỉnh sửa của tôi.
Steven Lu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.