web-dev-qa-db-fra.com

Dépendance spécifique au système d'exploitation npm package.json

Existe-t-il un moyen de spécifier des dépendances spécifiques au système d'exploitation dans un fichier npm package.json?

Par exemple, je voudrais seulement installer 'dbus' ( https://npmjs.org/package/dbus ) comme dépendance pour mon module si l'utilisateur exécute Linux. J'aurais une dépendance différente pour Mac et Windows.

57
sandeepmistry

Il existe un bon moyen possible de le faire, selon votre configuration.

npm package.json prend en charge une clé os ,

et aussi optionalDependencies

  • os peut être utilisé pour spécifier sur quel OS un module peut être installé.
  • optionalDependencies sont des dépendances de module que si elles ne peuvent pas être installées, npm les ignore et continue l'installation.

De cette façon, votre module peut avoir une dépendance optionnelle pour chaque système d'exploitation, et seul celui qui fonctionne sera chargé/installé ^. ^

EDIT: Comme @Sebastien le mentionne ci-dessous, cette approche est dangereuse . Pour tout système d'exploitation donné, au moins une de vos dépendances est "requise" et le reste "facultatif". Rendre toutes les versions de la dépendance facultatives signifie que si votre installation échoue pour une raison légitime, elle sautera silencieusement l'installation et il vous manquera une dépendance dont vous avez vraiment besoin.

35
TinyTimZamboni

Je pense que la réponse courte est non. Je peux penser à quelques solutions de contournement - la plus simple est de simplement tout ajouter à package.json quel que soit le système d'exploitation, puis require() la bonne au moment de l'exécution.

Si cela ne fonctionne pas pour vous, vous pourrez peut-être utiliser un script d'installation pour obtenir le résultat que vous recherchez - https://docs.npmjs.com/misc/scripts

Je n'ai pas testé cela mais je pense que cela fonctionnerait:

Ajoutez quelque chose comme ça à votre package.json:

,"scripts": {
  "install": "node install_dependencies.js"
}

Et puis ajoutez un install_dependencies.js fichier qui vérifie le système d'exploitation et exécute le npm install ... commandes.

7
Nathan Friedly

Il y a aussi le module bindings-shyp :

https://www.npmjs.com/package/bindings-shyp

Module d'aide au chargement du fichier .node de votre module natif

Il s'agit d'un module d'assistance pour les auteurs de modules complémentaires natifs Node.js. Il s'agit en fait du "couteau suisse" qui requiert () le fichier .node de votre module natif.

Tout au long de l'histoire des addons natifs de Node, les addons ont fini par être compilés à divers endroits, en fonction de l'outil de construction et de la version du nœud utilisée. Pour aggraver les choses, maintenant l'outil de construction gyp peut produire une version Release ou Debug, chacune étant construite dans des emplacements différents.

Ce module vérifie tous les emplacements possibles dans lesquels un addon natif serait construit et retourne le premier qui se charge avec succès.

1
TinyTimZamboni