Модулі глобального вузла встановлюються неправильно. Команду не знайдено


82

У мене проблема з установкою глобальних модульних вузлів, і все, що я знаходжу в Інтернеті, говорить, що вирішення - це просто додавання -g. Що не проблема. Я вважаю, що це проблема зв’язування або неправильна проблема з каталогом.

Ось що я роблю:

$ 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

Однак, коли я запускаю розташування прямого посилання, щоб висловити це працює:

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

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

Де знаходиться модуль:

$ 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

У моєму .bash_profile у мене є:

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

Чи потрібно змінювати середовище Node для завантаження у правильну папку? Щось не правильно пов’язує? Я загубився..

Дякую!

Інші характеристики:

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

1
Це тому, що / usr / local / share / npm / bin / не знаходиться у вашому $ PATH вашої оболонки. Тому оболонка не може знайти express.
JP Richardson

2
Я додав: export PATH = / usr / local / share / npm / bin: $ PATH до мого .bash_profile, і це спрацювало. Дякую! Додайте відповідь, щоб я міг її прийняти і підтримати.
im_benton

У моєму випадку, також встановивши NPM через Cellar на OSX, мій binшлях, який я встановив у .bash_profile, такий:export PATH=$PATH:/usr/local/Cellar/node/10.5.0/bin
Шейн,

Відповіді:


63

Додайте $(npm get prefix)/binдо свого PATH(наприклад, in .bashrc), приблизно так:

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

Для отримання додаткової інформації див . npm help npm:

Глобальний режим: npm встановлює пакети в префікс встановлення на префікс / lib / node_modules, а контейнери встановлюються в префікс / bin.

Префікс встановлення можна знайти за допомогою npm get prefixабо npm config list | grep prefix.


а як щодо несудо з використанням nvm, чи не повинен бути шлях $HOME/.npmдо .bash_profile або .bashrc? Я використовую nvm, тому хочу переконатись, що я не перев'язую речі на цьому.
бламба

Для всіх, хто встановив Node та npm через Homebrew на OSX, розташування папки bin, яке потрібно додати до, PATHбуде /usr/local/Cellar/node/VERSION_NUMBER/bin/.
Джон Беттс,

135

Це може означати, що префікс встановлення вашого вузла не такий, як ви очікуєте.

Ви можете встановити це так:

npm config set prefix /usr/local

тоді спробуйте запустити npm install -g ще раз, і це повинно вийти. Працював у мене на mac, і рішення йде з цього веб-сайту:

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

EDIT: Зверніть увагу, що я щойно зіткнувся з цим знову на новому Mac, який я налаштовую, і мені також довелося виконати процес, детально описаний тут на stackoverflow .


Я використовую, nodenvі, швидше за все, є кращий спосіб вирішити цю проблему для мого випадку. Однак ваше рішення працювало як швидке і брудне виправлення! Потім я повернув префікс назад на nodenvпрефікс, і я зміг запустити пакет з /usr/local path. Дякую!
Garrett Tacoronte

3
Я витратив місяці на те, щоб це виправити, і це єдина відповідь, яку я бачив, що виправила це для мене! ЩИРО дякую.
azz0r

Це все ще не працює для мене. Що я можу зробити? Я хочу встановити глобальний машинопис на win7.
Artimal

1
Я спробував багато рішень, але лише це зробило це для мене. З якоїсь причини для мого префікса було встановлено значення, /Users/(username)/.npm-globalхоча я все зробив заново. Я також на Mac
Castilho

Це зламає вас, якщо ви встановили Node через Cellar.
Шейн,

12

Мій npm також не зміг знайти глобальні пакети. Я зробив те, що запропонував Бред Парк:

npm config set prefix /usr/local

Потім я отримав помилку дозволів EACCES (НЕ ВИКОРИСТОВУВАТИ sudo npm install -g <package>) і виправив її через офіційні документи npm: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. У командному рядку у домашньому каталозі створіть каталог для глобальних установок:
 mkdir ~/.npm-global
  1. Налаштуйте npm, щоб використовувати новий шлях до каталогу:
 npm config set prefix '~/.npm-global'
  1. У бажаному текстовому редакторі відкрийте або створіть файл ~ / .profile та додайте цей рядок:
 export PATH=~/.npm-global/bin:$PATH
  1. У командному рядку оновіть системні змінні:
 source ~/.profile
  1. Потім встановіть пакет глобально і протестуйте його! Наприклад:
npm install -g awsmobile-cli
awsmobile configure


привіт усім, у мене питання. Після кроку 2 я не знаходжу bin / in ~ / .npm-global . Отже, це не працює, так?
Водолій

Це все одно має працювати. Не забувайте, що export PATH=~/.npm-global/bin:$PATHрядок знаходиться у файлі ~ / .profile . Ви отримуєте помилку?
Vicente

6

У моєму випадку змінна середовища NODE_PATH була порожньою. Перевірте, чи не пусто-

echo $NODE_PATH

якщо NODE_PATH порожній. Потім змініть ~ / .bash_profile і додайте NODE_PATH

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

Тепер встановіть модулі npm ще раз і перевірте, чи встановлено це на шляху npm root -g


Це! це моя проблема при використанні NVM і repl вимагає, щоб він шукав глобальні пакети на linux / fedora
Ray Foss

4

Я не коли - або встановлювати будь - яких НПЕ речі, через Суд! У мене є свої причини, але я просто намагаюся робити речі простими та заснованими на користувачах, оскільки це світ розвитку користувачів, і не всі мають доступ до root, і встановлення подібних речей root / sudo, здається, загрожує всім, що починається з. Зрештою, всі розробники повинні мати можливість слідувати цим інструкціям, а не лише привілейованим користувачам sudo.

Ця конкретна система є RHEL7, доступ до якої здійснюється через SSH:

Часто потрібні різні версії вузла, тому я використовую NVM https://github.com/creationix/nvm

Отже, з урахуванням сказаного, я можу показати вам робочий приклад для -g глобальних установок, використовуючи шляхи NVM, NPM та вузлів, що не використовують root.

встановіть префікс, .npm-packagesякщо це ще не зроблено . (зверніть увагу, це дефіс, а не підкреслення)

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

Потім відрегулюйте ~ / .bash_profile або .bashrc, якщо ви віддаєте перевагу читанню про те, чому і що тут , з наступною інформацією.

#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 

Це майже охоплює всі шляхи. Наприклад, якщо ви встановите такий npm install -g gulpзалп, він буде посилатися ~/.npm-packages/bin(зверніть увагу, це дефіс, а не підкреслення). (немає потреби в gulp-cliабо gulp-cl)

Ви можете в значній мірі замінити / прокоментувати всі інші експорти шляху вузлів. Ви можете розмістити цю інформацію про шлях нижче будь-якої іншої інформації про шлях, яку ви вже маєте, безпечно, не перезаписуючи цю інформацію.


1
  1. Додайте наступний рядок до вашого ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. Завантажити профіль bash

    bash -l
    


0

Проблема у мене була відсутністю двійкових файлів, оскільки для користувача .npmrc- файлу в моєму домашньому каталозі було bin-linksвстановлено значення false, хоча default is true.

На всякий випадок, якщо це ваша проблема, перевірте, щоб у жодному з ваших файлів .npmrc не було встановлено значення false.

Потім повторна установка всіх модулів створить двійкові файли, prefixщоб ви PATHмогли їх бачити.


0

Перевірте двійкову папку вашого глобального модуля Node і додайте її до своєї $ PATH.

npm list -g | head -1

Якщо ви використовуєте nodenv, шлях буде змінюватися щоразу, коли ви встановлюєте глобальну версію вузла. Додавання такого шляху вирішує мою проблему.

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

Ярлик для додавання шляху до zsh

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.