J'ai une question similaire à celle-ci , mais pas tout à fait la même.
Je voudrais que l'utilisateur de mon application l'installe avec toutes les dépendances nécessaires pour la façon dont il voudrait l'utiliser. Ainsi, par exemple, s'ils souhaitent persister sur MongoDB, seules les bibliothèques liées à Mongo seront installées, mais si elles souhaitent persister sur Redis, seules les bibliothèques liées à Redis seront installées. Je ne veux pas leur faire télécharger et installer des bibliothèques qu'ils n'utiliseront pas.
Je sais que je peux le faire à des fins de développement avec devDependencies
, mais cela va plus loin que cela. Comme le dit la réponse à la question ci-dessus, cela est plus étroitement lié aux profils de Python setuptools
extras_require
et de Clojure leiningen
. Quelque chose comme ça dans npm? Je pense vraiment que devDependencies
devrait être le dev
profil d'une manière plus polyvalente de spécifier les dépendances.
la source
MyPackage-Core
MyPackage-Db-Mongo
MyPackage-Db-Redis
etc ... beaucoup comme les gens font des modules bower qui sont destinés à étendre angularjs .package.json
qui a été résolue dans d'autres gestionnaires de packages.Réponses:
Le module de codépendance peut être ce que vous recherchez, ou tout ce qui fait quelque chose de similaire à:
package.json
qui ne sont pas automatiquement installées parnpm install
, par exempleoptionalPeerDependencies
require
fonction de style personnalisé qui connaîtoptionalPeerDependencies
et fait la bonne chose, y compris lancer / avertissement quand rien n'est trouvé qui remplit une classe requise de modules (par exemple niredis
, nimongo
, nimysql
, etc. ne sont installés).Une variante serait que si la fonctionnalité de base du module fonctionne sans aucune dépendance facultative (par exemple le modèle de plugin), pas d'erreur / d'avertissement lorsque rien n'est trouvé qui remplit une dépendance entre pairs.
Une autre variante consiste à faire la liste ci-dessus tout en tenant compte des dépendances de production et de développement, c'est-à-dire un analogue pour
dependencies
etdevDependencies
.Peut-être combiné avec un besoin à la demande tel que des modules optionnels sont requis paresseusement, par exemple:
la source
codependency
module fournit dans le cas où le module s'évapore du NPM et parce que les liens sans extraits sont de mauvaise forme SO.Si vous voulez de simples dépendances optionnelles comme des plugins, par exemple si vous installez foo vous l'exécuterez coloré mais s'il n'est pas installé, vous n'avez aucun problème et le voyez en gris, alors vous pouvez utiliser optionalDependecies dans le package.json :
Et dans le code:
Extrait de la documentation package.json .
la source
Ce que je fais, c'est configurer un script d'installation dans mon package.json, à l'intérieur
scripts
, comme ceci:Il se déroulera juste après
npm install
arrivées. Je l'utilise principalement pour générer automatiquement un.env
fichier avec des valeurs par défaut.Le
my-install.js
script peut exécuter différentes commandes, créer des fichiers, demander une entrée utilisateur, vous pouvez donc dire "Vous voulez Redis ou Mongo?":Ceci est une réponse très rapide, consultez readline pour lire correctement les entrées utilisateur et le processus enfant pour exécuter les commandes et traiter la sortie, etc.
Notez également que le script d'installation peut être celui que vous souhaitez (python, bash, etc.)
la source
npm install
nouvelle exécution à l'intérieur d'un script d'installation peut également déclencher un comportement inattendu. Je ne recommande pas cette solution.npm n'a vraiment pas été conçu pour cela, car l'une des parties les plus difficiles de la gestion des dépendances consiste à garantir des versions rapides et reproductibles, faciles et relativement sûres. Mais je crois qu'il y a un cas d'utilisation, et il y en avait certainement pour moi. J'ai donc écrit un package pour faire exactement ce que vous demandez.
Mon package est
install-subset
et peut être installé globalement avecnpm install -g install-subset
https://www.npmjs.com/package/install-subset
Tout d'abord, vous créez des listes blanches et des listes noires pour les sous-ensembles d'installation nommés dans votre package.json comme ceci:
Appelez-le ensuite avec, par exemple,
install-subset test
Cela réécrira temporairement votre package.json pour ne pas installer ces packages sur liste noire, puis le restaurera, ce qui, selon les packages, peut économiser beaucoup de temps et de bande passante.
Fonctionne également avec le fil, est open source et les problèmes / relations publiques sont les bienvenus.
Dans de nombreux cas, j'utilise cela sur notre serveur ci pour réduire le temps de construction, et sur notre dernier projet React Native, notre installation de développeur typique de 72 secondes à environ 20 secondes.
la source