Установка "глобальных" npm-зависимостей через package.json
У меня есть несколько "глобальных" зависимостей (jshint, csslint, buster и т.д.), которые я хотел бы автоматически установить и выполнить через командную строку, когда мой пакет установлен через npm install
. Возможно ли это?
В настоящее время я делаю следующее вручную:
-
npm install -g <package_name>
- из моего проекта:
npm link <package_name>
Обновление:
Просто наткнулся на этот запрос функции для npm. Кажется, что scripts
config внутри package.json - это способ пойти?
Обновление снова:
Или, прочитав npm docs, возможно, я должен использовать .gyp файл? Я в замешательстве.
Ответы
Ответ 1
Невозможно указать зависимости как "глобальные" из package.json
. И это по дизайну, так как Isaac заявляет в этом запросе на функцию, на который вы ссылаетесь:
Да, мы никогда не будем это делать.
Но "бинарные файлы" все еще могут использоваться, когда пакет установлен локально. Они будут в .../node_modules/.bin/
. И вы должны быть в состоянии поставить их в очередь с помощью preinstall
script.
Хотя, если серия команд довольно длинная (как предполагают "jshint, csslint, buster и т.д." ), вы можете захотеть изучить инструмент построения, например grunt
для выполнения различных задач:
{
// ...,
"scripts": {
"preinstall": "grunt"
}
}
Ответ 2
Мне очень нравится шаблон, в котором вы устанавливаете локальные зависимости, а затем используйте bash script, который устанавливает ваш PATH в ./node_modules/.bin
.
Файл: env.sh
# Add your local node_modules bin to the path for this command
export PATH="./node_modules/.bin:$PATH"
# execute the rest of the command
exec "[email protected]"
Затем вы можете использовать этот script перед любой командой bash. Если вы соедините это с Makefile или npm script:
Файл: Makefile
lint :
./env.sh csslint my_styles
Файл: package.json
"scripts": {
"lint": "./env.sh csslint my_styles"
}
Эти задачи в этих файлах выглядят так, как будто они ссылаются на csslint в каком-то глобальном местоположении, но фактически используют версию в вашем контейнере node_modules.
Поистине удивительным преимуществом этого является то, что эти зависимости можно легко управлять версиями, как и ваши другие модули node. Если вы придерживаетесь глобального решения для установки, вы можете скрыть определенную версию в пользовательской системе, которая требуется для одного из их других проектов.
Ответ 3
Вы должны попробовать следующее: https://github.com/lastboy/package-script
Я использую его для установки глобальных пакетов npm прямо из package.json. Он хорошо работает для клиентов, которые не являются технически грамотными.
Он даже проверяет, установлены ли пакеты, если они не установлены!