Est-il possible d'installer le package npm
uniquement s'il n'a pas déjà été installé?
J’ai besoin de cela pour accélérer les tests sur CircleCI, mais lorsque j’exécute npm install [email protected]
, etc., il télécharge toujours des choses et les installe à partir de scracth. Cependant, le dossier node_modules
avec tous les modules est déjà présent au moment de l’exécution des commandes protractor --version
etc. indique la version requise du paquet.
C'est parfait pour avoir une commande d'une ligne comme celle-ci:
protractor --version || npm install -g [email protected]
mais celui qui vérifiera également la version du paquet.
avec bash tu peux faire
[ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install [email protected]
Vous pourriez essayer npm list protractor || npm install [email protected]
Où npm list protractor
est utilisé pour trouver le package protractor
.
Si le paquet n'est pas trouvé, il retournera npm ERR! code 1
et fera npm install [email protected]
pour l'installation
Version fonctionnelle de l'excellent réponse de @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 "$@" install "$p@$v"
}
Utilisez comme:
$ install_package_if_needed protractor 2.1.0
Pour passer des options supplémentaires à npm
, spécifiez-les après la version, comme suit:
$ 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
J'ai eu ce même problème avec le désir d'installer des dépendances globales à partir de n'importe quel fichier "package.json" les nécessitant.
Ceci est pour un environnement de développement Windows.