NPM: как найти исходную папку./node_modules/.bin?

У меня проблема с установкой npm

Я создал проект, скажем, проект А

cd ~/projectA
npm install sails

но команда sails не найдена после установки.

Я знаю, что он успешно установлен в ~/projectA/node_modules каталог. но исполняемый файл не может быть получен. И я знаю, что он установлен ~/projectA/node_modules/.bin

Как я могу автоматически получить исходный файл.bin при входе в эту папку проекта?

Я сделал что-то не так?

7 ответов

Решение

Я могу дать вам не элегантное решение, которое работает для меня. Я только что экспортировал мой путь в мой файл.bashrc.

export PATH="$PATH:./node_modules/.bin"

Изменить: это было некоторое время, но я изменил свою стратегию, чтобы вместо этого использовать сценарии npm. В вышеприведенном случае настройте package.json следующим образом:

"scripts": {
    "sails": "sails"
}

Который вы можете запустить

npm run sails

или с аргументами

npm run sails -- <args>

Вы должны использовать npm bin Команда, чтобы получить абсолютный путь к вашему текущему каталогу bin узла.

Например:

➤ lessc
bash: lessc: command not found
➤ npm bin
/home/brice/[...]/node_modules/.bin
➤ export PATH=$(npm bin):$PATH
➤ lessc --version
lessc 1.7.3 (Less Compiler) [JavaScript]

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

Чуть более надежным является:

export PATH=$(npm bin):$PATH

Вы можете запустить его, добавить в свой профиль оболочки или создать псевдоним:

alias snpm='export PATH=$(npm bin):$PATH'

Если вы идете по пути псевдонима, обязательно используйте одинарные кавычки, чтобы задержать выполнение переменных!

Официальные инструкции для парусов ( https://github.com/balderdashy/sails) рекомендует

Чтобы установить последний стабильный выпуск с помощью инструмента командной строки:

sudo npm -g install sails

Это устанавливает глобально и добавляет в каталог, как /usr/local/bin это должно быть в вашем $PATH,

Но чтобы ответить на общий вопрос о расположении двоичных файлов, если вы устанавливаете их локально, их следует поместить в ./node_modules/.bin каталог (так запустить ./node_modules/.bin/sails ...)

Использовать в командной строке, как sails generate foo вам нужно будет установить модуль npm глобально.

npm install -g sails

Вы также можете использовать путь к корзине в команде, если вы не хотите устанавливать глобально:

./node_modules/sails/bin/sails.js generate foo

Если вам не нравится возиться со своим PATH для запуска сценария npm, который не является глобальным (например, вы единственный, кто его использует), я лично рекомендую использовать sh "alias".

  1. npm устанавливает (локально) ваш любимый пакет (например, json-diff здесь)

    cd ~ && npm install json-diff
    
  2. Псевдоним (сохраните в файле ~/.xxxxrc):

    alias diffj "\`npm bin\`/json-diff !*"
    

Затем, для сравнения 2 JSON's:

diffj old.json new.json

В моем ~/.bashrcУ меня есть следующее:

function nbin {
  local dir;
  dir=$(npm bin)
  if [ -d "$dir" ]; then
    ( # subshell to not change this shell's $PATH
      PATH=$dir:$PATH
      eval "$@"
    )
  else
    echo "\"$dir\" is not an npm binary directory." >&1
    return 1
  fi
}

Я могу запустить исполняемый файл foo в .bin каталог как:

nbin foo

Возможный обходной путь с NPM 5.2+ с использованием npx команда.

npx sails new test-project

См. Этот вопрос для аналогичного варианта использования и элегантных решений.

Другие вопросы по тегам