89 votes

Installation des dépendances npm "globales" via package.json

J'ai quelques dépendances "globales" (jshint, csslint, buster, etc.) que j'aimerais voir automatiquement installées et exécutables via la ligne de commande lorsque mon paquetage est installé via npm install . Est-ce possible ?

Actuellement, j'effectue les opérations suivantes manuellement :

  1. npm install -g <package_name>
  2. à partir de mon projet : npm link <package_name>

Mise à jour : Je viens de tomber sur cette demande de fonctionnalité pour npm. Il semble que le scripts config dans le package.json est la meilleure solution ?

Nouvelle mise à jour : Ou, après avoir lu le npm docs Je suis peut-être censé utiliser un Fichier .gyp ? Je ne sais plus où j'en suis.

61voto

Jonathan Lonowski Points 45253

Il n'est pas possible de spécifier des dépendances comme étant "globales" à partir d'un fichier package.json . Et c'est à dessein qu'Isaac dans cette demande de fonctionnalité que vous avez référencée :

Oui, nous ne le ferons jamais.

Mais les "binaires" peuvent toujours être utilisés lorsqu'un paquetage est installé localement. Ils seront dans .../node_modules/.bin/ . Et vous devriez être en mesure de les mettre en file d'attente à l'aide d'un preinstall script .

Toutefois, si la série de commandes est assez longue (comme " jshint, csslint, buster, etc. "), vous pouvez envisager l'utilisation d'un outil de construction tel que grunt pour effectuer les différentes tâches :

{
    // ...,

    "scripts": {
        "preinstall": "grunt"
    }
}

35voto

EndangeredMassa Points 9532

J'aime beaucoup le modèle qui consiste à installer les dépendances locales, puis à utiliser un script bash qui définit votre PATH à ./node_modules/.bin .

Fichier : env.sh

# Add your local node_modules bin to the path for this command
export PATH="./node_modules/.bin:$PATH"

# execute the rest of the command
exec "$@"

Ensuite, vous pouvez utiliser ce script avant n'importe quelle commande bash. Si vous associez cela à un Makefile ou npm script :

Fichier : Makefile

lint :
    ./env.sh csslint my_styles

Fichier : package.json

"scripts": {
  "lint": "./env.sh csslint my_styles"
}

Ces tâches dans ces fichiers donnent l'impression de référencer csslint dans un emplacement global, mais elles utilisent en fait la version dans votre node_modules bin.

L'avantage vraiment génial de ceci est que ces dépendances peuvent être versionnées facilement, tout comme vos autres modules node. Si vous vous en tenez à une solution d'installation globale, vous risquez de bloquer une version spécifique sur le système de l'utilisateur qui est nécessaire pour l'un de ses autres projets.

8voto

CMCDragonkai Points 544

Vous devriez essayer ceci : https://github.com/lastboy/package-script

Je l'ai utilisé pour installer des paquets npm globaux directement à partir du package.json. Cela fonctionne bien pour les clients qui n'ont pas de connaissances techniques.

Il vérifie même si les paquets sont déjà installés, si ce n'est pas le cas, il les installe !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X