Ответ 1
с bash вы можете сделать
[ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install [email protected]
Возможно ли установить пакет npm
только в том случае, если он еще не установлен?
Мне нужно это, чтобы ускорить тестирование CircleCI, но когда я запускаю npm install [email protected]
и т.д., он всегда загружает вещи и устанавливает их из scracth, однако папка node_modules
со всеми модулями уже присутствует в момент запуска команд (кэшируется из предыдущей сборки) и protractor --version
и т.д. показывает нужную версию пакета.
Его идеально подходит для выполнения одной однострочной команды:
protractor --version || npm install -g [email protected]
но тот, который также проверяет версию пакета.
с bash вы можете сделать
[ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install [email protected]
Функциональная версия отличного ответа от @JeromeWAGNER:
function install_package_if_needed() {
local p=${1:-Package required}
local v=${2:-Version required}
shift 2
local i=$(node -p "require('$p/package.json').version" 2>/dev/null)
[ "$i" == "$v" ] || npm "[email protected]" install "[email protected]$v"
}
Используйте как:
$ install_package_if_needed protractor 2.1.0
Чтобы передать дополнительные параметры npm
, укажите их после версии, например:
$ install_package_if_needed protractor 2.1.0 -g
[ $(node -p "try{require('protractor/package.json').version}catch(e){}") != "2.1.0" ] && npm install grunt
Вы можете попробовать npm list protractor || npm install [email protected]
Где npm list protractor
используется для поиска пакета protractor
.
Если пакет не найден, он вернет npm ERR! code 1
и сделает npm install [email protected]
для установки
У меня была эта же проблема вместе с желанием установить глобальные зависимости из любого файла "package.json", требующего их.
Это для среды разработки Windows.