npm: désactiver le script de post-installation pour le package

142

Existe-t-il une option npm pour désactiver le script de post-installation lors de l'installation du package? Ou pour réécrire n'importe quel champ de package.json?

farwayer
la source
La question est très claire , mais ... est par hasard ce votre objectif final? github.com/zloirock/core-js#postinstall-message ;-)
conny le

Réponses:

268

Il n'est pas possible de désactiver uniquement les postinstallscripts. Cependant, vous pouvez désactiver tous les scripts en utilisant:

$ npm install --ignore-scripts

Comme delbertooo l'a mentionné dans les commentaires, cela désactive également les scripts des dépendances.

Gergo Erdosi
la source
2
THX. C'est exactement ce dont j'ai besoin. Où puis-je trouver de telles options? Ceci n'est pas décrit dans 'npm help install', 'npm help config' et 'npm help scripts'.
farwayer
3
J'ai vérifié le code directement: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi
69
Mise en garde! L'option --ignore-scriptsdésactive TOUS les scripts - même de vos dépendances. Si vos dépendances ont besoin d'exécuter des scripts pour, par exemple, installer des binaires, ils peuvent être endommagés / incomplets.
delbertooo
7
Alors y a-t-il une technique pour installer node_modules (et tous leurs scripts) mais ignorer uniquement les scripts du paquet principal?
Derrick
3
Non seulement cela, mais --ignore-scriptsou l'option de configuration associée (que j'ai définie globalement) signifiera également que cela npm run startne fera rien en silence et signalera le succès. Étonner.
Ash Berlin-Taylor
21

Vous pouvez également activer les paramètres dans le fichier de configuration npm.

npm config set ignore-scripts true

Remarque: Cela désactivera les scripts pour tous les packages NPM.

RoboMex
la source
2
Cela devrait être la réponse. Voir l'article de blog npm: blog.npmjs.org/post/141702881055/…
Pieter Venter le
Notez qu'il désactive également la possibilité d'exécuter manuellement npm run …- il ne fera simplement rien, sans aucun avertissement.
CodeManX
4

Pour ce faire pour votre propre bibliothèque, je recommande quelque chose de simple comme:

#!/usr/bin/env bash

## this is your postinstall.sh script:

set -e;

if [ "$your_pkg_skip_postinstall" == "yes" ]; then
  echo "skipping your package's postinstall routine.";
  exit 0;
fi

puis faites votre installation npm avec:

your_pkg_skip_postinstall="yes" npm install
Alexander Mills
la source
1
Merci! Cela fonctionne très bien si vous essayez simplement de désactiver votre propre script mais pas TOUS les scripts dans toutes les dépendances.
Brian Neisler
@BrianNeisler yer très bienvenu, se sent toujours bon d'aider les autres. En passant, je pense que les doubles crochets [[]] pourraient être meilleurs que les crochets simples pour la plupart des cas d'utilisation, pas sûr que cela.
Alexander Mills
2

Je voulais désactiver le script de post-installation pour mon projet, mais je voulais que tous les scripts des dépendances de mon projet s'exécutent quand je le fais npm install. C'est ce que j'ai fini par faire.

  1. Créer un script ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. Dans votre fichier package.json
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

maintenant, définissez simplement la variable d'environnement SKIP_BUILD = 1 pour empêcher votre paquet de se construire et vos dépendances se construiront très bien

SKIP_BUILD=1 npm install
Atul
la source