web-dev-qa-db-fra.com

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

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

Actuellement, je fais les choses suivantes manuellement:

  1. npm install -g <package_name>
  2. depuis mon projet: npm link <package_name>

Mise à jour: Je viens de trouver cette demande de fonctionnalité pour npm. Il semble que la configuration scripts dans package.json soit la solution.

Mettre à jour à nouveau: Ou, après avoir lu le npm docs , je suis peut-être censé utiliser un fichier . Gyp ? Je suis confus.

75
uglymunky

Il n'est pas possible de spécifier des dépendances comme "globales" à partir d'un package.json. Et, ceci est voulu par Isaac indique dans cette demande de fonctionnalité vous avez mentionné:

Oui, nous ne ferons jamais ça.

Toutefois, les "fichiers binaires" peuvent toujours être utilisés lorsqu'un package est installé localement. Ils seront dans .../node_modules/.bin/. Et, vous devriez pouvoir les mettre en file d'attente avec un preinstall script .

Cependant, si la série de commandes est assez longue (comme " jshint, csslint, buster, etc. " suggérerait), vous voudrez peut-être regarder en utilisant un outil de construction tel que grunt pour effectuer les différentes tâches:

{
    // ...,

    "scripts": {
        "preinstall": "grunt"
    }
}
52
Jonathan Lonowski

J'aime beaucoup le modèle dans lequel vous installez des dépendances locales, puis utilisez un script bash qui définit votre PATH sur ./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 toute commande bash. Si vous associez cela à un script Makefile ou npm:

Fichier: Makefile

lint :
    ./env.sh csslint my_styles

Fichier: package.json

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

Ces tâches dans ces fichiers ressemblent à celles qui référencent csslint dans un emplacement global, mais elles utilisent en fait la version de votre corbeille node_modules.

L'avantage vraiment impressionnant est que ces dépendances peuvent être versionnées facilement, tout comme vos autres modules de nœud. Si vous vous en tenez à une solution d'installation globale, vous pourriez utiliser une version spécifique du système de l'utilisateur requise pour l'un de ses autres projets.

29
EndangeredMassa

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

Je l'utilise pour installer des packages npm globaux directement à partir de package.json. Cela fonctionne bien pour les clients qui ne sont pas techniquement alphabétisés.

Il vérifie même si les paquets sont déjà installés, sinon installez-les!

8
CMCDragonkai