0

J'utilise le bloc de script package.json pour appeler le script postinstall.sh immédiatement après yarn install et yarn install --production.Noeud/NPM: Comment passer des arguments avec l'appel de fichier .sh

postinstall.sh contient des npm privés paquets, donc nous voulons télécharger devDependencies de ces paquets que lorsque l'environnement est développement et nous voulons ignorer lorsque l'environnement est production.

package.json

"private": true, 
    "scripts": { 
    "postinstall": "./postinstall.sh" 
    } 

postinstall.sh

# Get the input from user to check server is Production or not 
echo 
echo "INFO: We are not downloading Development dependencies of following services in Production environment: 
echo "WARN: please enter 'yes' or 'no' only." 

while [[ "$PRODUCTION_ENV" != "yes" && "$PRODUCTION_ENV" != "no" ]] 
do 
    read -p "Is this Production environment?(yes/no): " PRODUCTION_ENV 
done 

if [[ "$PRODUCTION_ENV" == "yes" ]]; then 
    ENV='--only=production' 
fi 

npm install $ENV --ignore-scripts pkg-name 

Le problème avec le script ci-dessus est que nous ne voulons pas d'interaction utilisateur, alors comment puis-je passer un argument de package.json en fonction de l'environnement?

Répondre

0

Et, la réponse simple à ceci est "postinstall": "./postinstall.sh \"$NODE_ENV\"". Donc, regard final comme ci-dessous.

"private": true, 
"scripts": { 
    "postinstall": "./postinstall.sh \"$NODE_ENV\"" 
} 
0

dans package.json vous devriez être en mesure de vérifier NODE_ENV et seulement exécuter votre script bash quand il est pas la production:

"private": true, 
    "scripts": { 
    "postinstall": "[ \"$NODE_ENV\" != production ] && ./postinstall.sh" 
    } 

Cela devrait fonctionner parce que sur un environnement de production vous installer vos modules avec npm install --production afin le script ne fonctionnera pas.

+0

De cette façon j'ai essayé. Dans notre cas, cela ne fonctionne pas car nous voulons exécuter postinstall.sh sur les deux environnements. –