web-dev-qa-db-fra.com

NPM script de préinstallation

J'essaie d'exécuter un script de contrôle avant d'installer des packages. Par exemple:

{
  "name": "pre-hook-check",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "preinstall": "echo preinstall",
    "postinstall": "echo postinstall"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "abc": "^0.6.1",
    "preact": "^8.2.5"
  }
}

Il semble que le script de pré-installation et de post-installation de l'exemple ci-dessus ne fonctionne que lorsque je fais npm install, mais je veux qu'il s'exécute chaque fois que j'essaie d'installer quoi que ce soit. 

Par exemple: supposons que je veuille écrire un script pour vérifier la version du paquet chaque fois que mon équipe exécute npm install <some package>. Je veux vérifier la version du paquet d'installation et vérifier que sa version est supérieure à "1.0.0", sinon ne les laissez pas installer.

Je prévoyais d'écrire un script de pré-installation qui va

npm info lodash version 

et vérifie la version de tout paquet que j'essaie d'installer. Si la version n'est pas disponible, j'ai l'intention de la rendre interactive et de demander à l'utilisateur d'accuser réception avant de l'installer. 

5
user98239820

Vous avez raison, le script de préinstallation ne s’exécute que lorsque npm install est installé et il n’existe actuellement aucun moyen d’exécuter un script avant d’installer un module, mais vous pouvez utiliser Script de shell et npm view https://docs.npmjs.com/cli/view pour le faire.

Commencez par créer un fichier moduleinstall.sh ayant la même étendue que votre package.json et le script Shell ci-dessous. 

echo 'Enter the name of the module'
read module_name
npm view $module_name version 
echo "Do you want to install this version(y/N) " 
read option 
if [ "$option" = "N" ] || [ "$option" = "n" ]
then 
echo "exiting...."
exit 1
else
npm install $module_name
fi

assurez-vous de le rendre exécutable en utilisant chmod +x moduleinstall.sh, puis écrivez-le dans votre package.json

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"info": "./moduleinstall.sh"
}

Il ne vous reste plus qu'à exécuter la commande npm run info puis à suivre les instructions pour installer un module en vérifiant la version. Vous pouvez le faire avancer en utilisant différentes options de vue npm et de script Shell. J'espère que cela t'aides.

2
yawningphantom