Npm postinstall seulement sur le développement
J'ai mnp module avec le paquet suivant.json
{
"name": "my-app",
"version": "0.0.0",
"scripts": {
"prepublish": "bower install",
"build": "gulp"
},
"dependencies": {
"express": "~4.0.0",
"body-parser": "~1.0.1"
},
"devDependencies": {
"gulp": "~3.6.0",
"bower": "~1.3.2"
}
}
Pour le déploiement de mon application à la production, je ne veux pas installer devDependecies donc, je lance npm install --production
. Mais dans ce cas prepublish
script sont appelés, mais il n'a pas besoin, parce que je utiliser le CDN liens dans la production.
Comment appeler script postinstall seulement après npm install
mais pas après npm install --production
?
Vous devez vous connecter pour publier un commentaire.
Plus récent mnp (& Fils) versions incluent un support pour la
prepare
script qui est exécuté après chaqueinstall
courir, mais seulement dans le mode de développement. Aussi, leprepublish
est obsolète. Cela devrait être suffisant:Docs: https://docs.npmjs.com/misc/scripts
Je pense que vous ne pouvez pas choisir ce que les scripts sont exécutés selon la
--production
argument. Ce que vous pouvez faire, cependant, est de fournir un script qui teste lesNODE_ENV
variable et ne s'exécute quebower install
si ce n'est pas la "production".Si vous êtes toujours dans un unix-y de l'environnement, vous pouvez le faire comme ceci:
"[ \"$NODE_ENV\" = production ] || [ \"$NODE_ENV\" = beta ] || bower install"
[ \"$npm_config_production\" ] && exit 0; bower install
ou[ \"$NODE_ENV\" == production ] && exit 0; bower install
Cela ne fonctionne que si vous êtes sur un environnement de type unix:
MNP définit une variable d'environnement à un "vrai" lors de l'installation est exécuté avec --production. Uniquement l'exécution de ce script si npm install n'a pas été exécutée avec --production, utiliser le code suivant.
"postinstall": "if [ -n \"$npm_config_production\" ]; then npm run build-for-production; fi"
Je travaille avec windows, osx et linux, j'utilise donc un NON spécifiques à un environnement solution pour résoudre ce problème:
Dans le postinstall gestionnaire-je exécuter un script js qui vérifie les processus.env.NODE_ENV variable et fait le travail.
dans mon cas précis, j'ai pour exécuter une gorgée seulement dans le développement env:
partie du paquet.json
tous postinstall.js script
dernière ligne de gulpfile.js
il est important d'exporter gorgée de la gulpfile.js parce que toutes les tâches sont spécifiques gulp instance.
Solution qui est moins dépendante de l'unix de la nature de votre shell:
npm install
l'englobant une. La modification de la valeur de retour de la commande de la chaîne de bugs pour moi:"(node -e \"process.env.NODE_ENV !== 'production' && process.exit()\" && grunt devTask) || node -v"
Je suis en utilisant si-env module. C'est moins verbeux.
PS: je n'ai pas tester sur windows encore.
Installer avec:
que dans
package.json
scripts:if-env
doit être endependencies
au lieu dedevDependencies
?Atterri ici parce que j'ai eu le même problème. Il a terminé avec une solution qui teste l'existence d'un package sous node_modules que je sais ne devrait être disponible dans le développement.
Cela fonctionne très bien pour moi sur le plan conceptuel, comme la préparation des scripts appelés par lerna sont principalement ts-pour-js compilations.
J'ai un problème plus général - où j'ai envie de sauter de l'exécution de l'
postinstall
script local (direct) installe - comme quand je suis le développement de l'emballage et de l'exécuteryarn add --dev my-new-dependency
.C'est ce que je suis venu avec. Il fonctionne avec les deux mnp et de fils.
postinstall.js:
paquet.json: