Mô-đun Global Node không được cài đặt đúng cách. Lệnh không tìm thấy


82

Tôi đang gặp sự cố khi cài đặt mô-đun nút toàn cầu và mọi thứ tôi tìm thấy trực tuyến cho biết cách giải quyết chỉ là thêm -g. Đó không phải là vấn đề. Tôi tin rằng đó là sự cố liên kết hoặc sự cố thư mục sai.

Đây là những gì tôi làm:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly

$ express myapp
bash: express: command not found

Tuy nhiên, khi tôi chạy vị trí liên kết trực tiếp để thể hiện nó hoạt động:

   $ /usr/local/share/npm/bin/express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
... Builds app correctly

Mô-đun ở đâu:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express

Trong .bash_profile của tôi, tôi có:

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node

Tôi có cần thay đổi môi trường Node để tải xuống đúng thư mục không? Có phải một cái gì đó không liên kết chính xác? Tôi bị lạc ..

Cảm ơn!

Các thông số kỹ thuật khác:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2

1
Đó là vì / usr / local / share / npm / bin / không có trong $ PATH của shell của bạn. Đó là lý do tại sao vỏ không thể tìm thấy express.
JP Richardson

2
Tôi đã thêm: xuất PATH = / usr / local / share / npm / bin: $ PATH vào .bash_profile của tôi và nó đã hoạt động. Cảm ơn! Thêm câu trả lời để tôi có thể chấp nhận và ủng hộ.
im_benton

Trong trường hợp của tôi, cũng có NPM cài đặt qua Cellar trên OSX, tôi bincon đường, mà tôi đặt trong .bash_profile, là:export PATH=$PATH:/usr/local/Cellar/node/10.5.0/bin
Shane

Câu trả lời:


63

Thêm $(npm get prefix)/binvào PATH(ví dụ: trong .bashrc) của bạn, như vậy:

echo "export PATH=$PATH:$(npm get prefix)/bin" >> ~/.bashrc

Để biết thêm thông tin, hãy xem npm help npm:

chế độ toàn cầu: npm cài đặt các gói vào tiền tố cài đặt tại prefix / lib / node_modules và các thùng được cài đặt trong prefix / bin.

Bạn có thể tìm thấy tiền tố cài đặt bằng npm get prefixhoặc npm config list | grep prefix.


Còn đối với những người không sử dụng nvm thì không phải sudo, đường dẫn có $HOME/.npmphải là .bash_profile hoặc .bashrc không? Tôi sử dụng nvm, vì vậy muốn đảm bảo rằng tôi không ràng buộc mọi thứ trên này.
blamb

Đối với bất kỳ ai đã cài đặt Node và npm qua Homebrew trên OSX, vị trí của thư mục bin mà bạn cần thêm vào PATHsẽ là /usr/local/Cellar/node/VERSION_NUMBER/bin/.
Jon Betts

135

Điều này có thể có nghĩa là tiền tố cài đặt nút của bạn không như bạn mong đợi.

Bạn có thể đặt nó như vậy:

npm config set prefix /usr/local

sau đó thử chạy npm install -glại, và nó sẽ hoạt động tốt. Làm việc cho tôi trên máy Mac và giải pháp đến từ trang web này:

http://webbb.be/blog/command-not-found-node-npm/

CHỈNH SỬA: Lưu ý rằng tôi vừa gặp lại điều này trên một máy Mac mới mà tôi đang thiết lập và cũng phải thực hiện quy trình chi tiết tại đây trên stackoverflow .


Tôi đang sử dụng nodenvvà rất có thể có một cách tốt hơn để giải quyết vấn đề này cho trường hợp của tôi. Tuy nhiên, giải pháp của bạn đã hoạt động như một bản sửa lỗi nhanh chóng và bẩn thỉu! Sau đó, tôi chuyển tiền tố trở lại nodenvtiền tố và tôi có thể chạy gói từ /usr/local path. Cảm ơn!
Garrett Tacoronte

3
Tôi đã dành hàng tháng trời để sửa lỗi này và đây là câu trả lời duy nhất tôi thấy đã sửa nó cho tôi! Cảm ơn bạn rất nhiều.
azz0r

Nó vẫn không hoạt động đối với tôi. Tôi có thể làm gì? Tôi muốn cài đặt phiên bản toàn cầu trên win7.
Artimal

1
Tôi đã thử rất nhiều giải pháp nhưng chỉ có giải pháp này đã làm được điều đó cho tôi. Vì lý do nào đó, tiền tố của tôi được đặt thành /Users/(username)/.npm-globalmặc dù tôi đã thực hiện cài đặt mới mọi thứ. Tôi cũng đang sử dụng máy Mac
Castilho

Điều này sẽ phá vỡ bạn nếu bạn đã cài đặt Node qua Cellar.
Shane

12

Npm của tôi cũng không thể tìm thấy các gói toàn cầu. Tôi đã làm những gì Brad Parks đề nghị:

npm config set prefix /usr/local

Sau đó, tôi gặp lỗi quyền EACCES (KHÔNG SỬ DỤNG sudo npm install -g <package>) và đã sửa nó thông qua tài liệu npm chính thức: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. Trên dòng lệnh, trong thư mục chính của bạn, hãy tạo một thư mục cho các cài đặt chung:
 mkdir ~/.npm-global
  1. Định cấu hình npm để sử dụng đường dẫn thư mục mới:
 npm config set prefix '~/.npm-global'
  1. Trong trình soạn thảo văn bản ưa thích của bạn, hãy mở hoặc tạo tệp ~ / .profile và thêm dòng này:
 export PATH=~/.npm-global/bin:$PATH
  1. Trên dòng lệnh, hãy cập nhật các biến hệ thống của bạn:
 source ~/.profile
  1. Sau đó cài đặt một gói trên toàn cầu và kiểm tra nó! Ví dụ:
npm install -g awsmobile-cli
awsmobile configure


chào tất cả mọi người, tôi có câu hỏi. Sau bước 2, tôi không tìm thấy bin / in ~ / .npm-global . Vì vậy, nó không hoạt động, phải không?
AquariusPotter

Nó vẫn sẽ hoạt động. Đừng quên rằng export PATH=~/.npm-global/bin:$PATHdòng đó nằm trong tệp ~ / .profile . Bạn nhận được bất kỳ lỗi?
Vicente

6

Trong trường hợp của tôi, biến môi trường NODE_PATH trống. Kiểm tra xem nó có trống không-

echo $NODE_PATH

nếu NODE_PATH trống. Sau đó thay đổi ~ / .bash_profile và thêm NODE_PATH

nano ~/.bash_profile
export NODE_PATH=`npm root -g`
source ~/.bash_profile

Bây giờ hãy cài đặt lại các mô-đun npm và kiểm tra xem nó có đang được cài đặt trên đường dẫn hay không npm root -g


Điều này! là vấn đề của tôi khi sử dụng NVM và của repl yêu cầu để có nó tìm kiếm các gói toàn cầu về Linux / fedora
Ray Foss

4

Tôi chưa bao giờ cài đặt bất kỳ thứ npm nào, thông qua sudo! Tôi có lý do của riêng mình, nhưng tôi chỉ cố gắng giữ cho mọi thứ đơn giản và dựa trên người dùng, vì đây là thế giới phát triển người dùng và không phải ai cũng có quyền truy cập root và việc cài đặt root / sudo những thứ như thế này dường như làm lộn xộn mọi thứ để bắt đầu với. Rốt cuộc, tất cả các nhà phát triển sẽ có thể làm theo các hướng dẫn này, không chỉ người dùng sudo có đặc quyền.

Hệ thống cụ thể này là RHEL7 được truy cập qua SSH:

Thường thì một người cần nhiều phiên bản khác nhau của nút, vì vậy tôi sử dụng NVM https://github.com/creationix/nvm

Vì vậy, với những gì đã nói, tôi có thể cho bạn thấy một ví dụ làm việc cho -gcác cài đặt toàn cầu, sử dụng NVM, NPM và các đường dẫn nút không sử dụng root.

đặt tiền tố của bạn cho .npm-packagesnếu nó chưa có. (lưu ý, đó là dấu gạch ngang, không phải dấu gạch dưới)

nvm config ls
prefix = "/home/<yourusername>/.npm-packages"

Sau đó, điều chỉnh ~ / .bash_profile hoặc .bashrc của bạn nếu bạn muốn đọc lại lý do và điều gì ở đây , với thông tin sau.

#PATH EXPORTS
NODE_MODULES=$HOME/.npm                                          
NPM_PACKAGES=$HOME/.npm-packages/bin                           
export PATH=$PATH:$HOME/bin:$NODE_MODULES:$NPM_PACKAGES         

#NVM ENABLE                                                 
export NVM_DIR="$HOME/.nvm"                                   
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 

Điều đó bao gồm tất cả các con đường. Ví dụ: nếu bạn cài đặt gulp như thế này, npm install -g gulpnó sẽ liên kết với biểu tượng ~/.npm-packages/bin(lưu ý rằng đó là dấu gạch ngang, không phải dấu gạch dưới). (không cần gulp-cli, hoặc gulp-cl)

Bạn có thể thay thế / nhận xét tất cả các xuất khẩu đường dẫn nút khác. Bạn có thể đặt thông tin đường dẫn này bên dưới bất kỳ thông tin đường dẫn nào khác mà bạn đã có, một cách an toàn mà không cần ghi đè lên nội dung đó.


1
  1. Thêm dòng sau vào của bạn ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. Tải hồ sơ bash

    bash -l
    

1

Đối với người dùng Windows

Thêm cái này vào đường dẫn của bạn: "% AppData% \ npm"


0

Vấn đề tôi gặp phải là thiếu tệp nhị phân vì tệp .npmrc của người dùng cụ thể trong thư mục chính của tôi đã bin-linksđặt thành false, mặc dù default is true.

Đề phòng trường hợp đây là sự cố của bạn, hãy kiểm tra xem không có tệp .npmrc nào của bạn được đặt thành false.

Sau đó, cài đặt lại tất cả các mô-đun sẽ tạo các tệp nhị phân tại prefixđể bạn PATHcó thể nhìn thấy chúng.


0

Kiểm tra thư mục nhị phân của mô-đun Node chung của bạn và thêm nó vào $ PATH của bạn.

npm list -g | head -1

Nếu bạn sử dụng nodenv, đường dẫn sẽ thay đổi bất cứ khi nào bạn cài đặt phiên bản nút chung. Thêm đường dẫn như thế này giải quyết vấn đề của tôi.

"$HOME/.nodenv/versions/$(nodenv global)/bin"

Phím tắt để thêm đường dẫn tới zsh

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
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.