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".
npm устанавливает (локально) ваш любимый пакет (например, json-diff здесь)
cd ~ && npm install json-diff
Псевдоним (сохраните в файле ~/.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
См. Этот вопрос для аналогичного варианта использования и элегантных решений.