Npm global не используется? - PullRequest
0 голосов
/ 25 мая 2018

Итак, у меня ранее были некоторые проблемы с npm, и я следовал некоторым командам stackoverflow / github, чтобы попытаться их исправить.Который работал ... Вроде.Все было хорошо до недавнего времени, когда я понял, что мои глобальные пакеты npm на самом деле не читаются / не используются.

Так что всякий раз, когда я делал npm -g, устанавливаю xxx или обновление.Он корректно обновляет глобальную папку, но он просто не используется.Итак, я пошел немного покопаться и нашел это.

Где npm читает / использует из

usr/local/lib/node_modules

Где глобальная установка устанавливается в

Users/Me/.npm-global/lib/node_modules

Так что всякий раз, когдаЯ выполнил проверку -g для своих модулей и прочего, все хорошо и обновлено, но когда я на самом деле пытаюсь что-либо запустить, команда npm использует команду из более старых папок.Поэтому я не могу ничего обновить или установить с помощью -g.И ничего не попадает в старую папку, которая фактически используется.

Как мне решить эту проблему?Были ли испорчены какие-либо ссылки или профиль?

Ответы [ 4 ]

0 голосов
/ 08 июня 2018

Просто небольшое изменение в ответе maxletou, вы пытались установить префикс следующим образом?

npm config set prefix /usr/local
0 голосов
/ 06 июня 2018

Ниже приведены инструкции по изменению домашнего каталога для глобальных установок npm для текущего зарегистрированного пользователя:

  1. Создание каталога для глобальных установок:

    mkdir ~/.npm-global

  2. Настройте npm для использования нового пути к каталогу:

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

  3. Откройте или создайте ~ / .profileфайл и добавьте эту строку:

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

  4. Вернувшись в командную строку, обновите системные переменные:

    source ~/.profile

  5. Тест: загрузка пакета по всему миру без использования sudo.

    npm install -g <package_name>

Вместо шагов 1-5 можно использоватьсоответствующая переменная ENV (например, если вы не хотите изменять ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

Приведенная выше конфигурация не будет работать, если вы используете sudo для установки модулей npm, поскольку она будет следовать конфигурациямустановлен для пользователя root.

0 голосов
/ 07 июня 2018

Необходимо соблюдать порядок загрузки.

Загрузка из node_modules Папки

Если идентификатор модуля передан require() не является основным модулем и не начинается с &#39;/&#39;, &#39;../&#39; или &#39;./&#39;, затем Node.js запускается в родительском каталоге текущего модуля и добавляет /node_modules и пытается загрузитьМодуль из этого места.Узел не будет добавлять node_modules к пути, уже заканчивающемуся node_modules.

Если он там не найден, он перемещается в родительский каталог и т. Д., Пока корень файловой системы не будетдостигли.

Например, если файл &#39;/home/ry/projects/foo.js&#39; называется require(&#39;bar.js&#39;), то Node.js будет выглядеть в следующих местах, в следующем порядке:

  • /home/ry/projects/node_modules/bar.js
  • /home/ry/node_modules/bar.js
  • /home/node_modules/bar.js
  • /node_modules/bar.js

Это позволяет программам локализовать свои зависимости, чтобы они не конфликтовали.

Можно требовать, чтобы определенные файлы или подмодули распространялись вместе с модулем, включая суффикс пути после имени модуля.Например, require(&#39;example-module/path/to/file&#39;) разрешит path/to/file относительно места расположения example-module.Суффиксный путь следует той же семантике разрешения модуля.

0 голосов
/ 01 июня 2018

Похоже, что это о конфигурации префикса npm.Глобальный префикс - это папка, в которую npm будет устанавливать глобальные пакеты.

Сначала я бы запустил следующую команду, чтобы получить значение глобального префикса (https://docs.npmjs.com/cli/prefix)

$ npm prefix -g

Чтобы установить его вдругое значение:

npm config set prefix /usr/local/lib/node_modules

Это для расположения ваших глобальных пакетов, теперь вам нужно проверить, что переменная PATH терминала проверяет эту папку на наличие двоичных файлов.

$ echo $PATH

Командавыше выведет разделенный ":" список папок, которые ваша оболочка проверяет на наличие двоичных файлов.

Ваше глобальное местоположение префикса npm должно быть частью этого списка, из вашего вопроса я бы предположил, что эта папка / usr / local/ lib / node_modules уже есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...