Je souhaite copier automatiquement certains fichiers d'un package npm
dans le répertoire local de l'utilisateur après son exécution
npm install my-package
Je peux les installer en déclarant "files"
dans package.json
. Le problème est --- les fichiers ne sont pas placés dans le répertoire local. J'ai donc besoin d'exécuter le script postinstall
.
Mais maintenant, je ne sais pas où le paquet est installé (peut-être plus haut dans l'arborescence), comment puis-je accéder de manière fiable aux fichiers et les copier dans le répertoire local via le script?
(Par répertoire local je veux dire --- depuis lequel je lance npm install my-package
en tant qu'utilisateur consommant le paquet.)
METTRE À JOUR. Il semble que le script postinstall
s'exécute en tant que processus appartenant à npm
avec le répertoire personnel étant node_modules/my-package
, aussi je ne sais toujours pas comment accéder au répertoire personnel de l'utilisateur autrement qu'avec le ../../
naïf.
Depuis npm 3.4, vous pouvez utiliser l’environnement $ INIT_CWD: https://blog.npmjs.org/post/164504728630/v540-2017-08-22
Lors de l'exécution des scripts de cycle de vie, INIT_CWD contient désormais le répertoire de travail d'origine à partir duquel npm a été exécuté.
Pour résoudre ce problème, ajoutez à votre script postinstall dans package.json les éléments suivants:
"scripts": {
"postinstall": "cp fileYouWantToCopy $INIT_CWD",
},
var cwd = require('path').resolve();
Remarque: Si les arguments à résoudre ont des chaînes de longueur nulle, le répertoire de travail actuel sera utilisé à la place.
Je voudrais utiliser shellscript/bash
-package.json
"scripts":
"postinstall": "./postinstall.sh",
-postinstall.sh
#!/bin/bash
# go to YOUR_NEEDED_DIRECTORY .e.g "dist" or $INIT_CWD/dist
cd YOUR_NEEDED_DIRECTORY
# copy each file/dir to user dir(~/)
for node in `ls`
do
cp -R $node ~/$node
done
N'oubliez pas de!
chmod +x postinstall.sh