éviter ../../../../../../ ..
Tout dans une application n'appartient pas correctement au npm public et la surcharge de mise en place d'un npm privé ou d'un dépôt git est encore assez importante dans de nombreux cas. Voici quelques approches pour éviter le
../../../../../../../
problème des chemins relatifs.
node_modules
Les gens s'opposent parfois à mettre des modules spécifiques à l'application dans node_modules car il n'est pas évident de vérifier vos modules internes sans également archiver des modules tiers à partir de npm.
La réponse est assez simple! Si vous avez un .gitignore
fichier qui ignore node_modules
:
node_modules
Vous pouvez simplement ajouter une exception avec !
pour chacun de vos modules d'application internes:
node_modules/*
!node_modules/foo
!node_modules/bar
Veuillez noter que vous ne pouvez pas ignorer un sous-répertoire, si le parent est déjà ignoré. Donc, au lieu d'ignorer node_modules
, vous devez ignorer tous les répertoires intérieur node_modules
avec l'
node_modules/*
astuce, puis vous pouvez ajouter vos exceptions.
Maintenant, n'importe où dans votre application, vous pourrez require('foo')
ou require('bar')
non avoir un chemin relatif très grand et fragile.
Si vous avez beaucoup de modules et que vous souhaitez les garder plus séparés des modules tiers installés par npm, vous pouvez simplement les mettre tous dans un répertoire node_modules
tel que node_modules/app
:
node_modules/app/foo
node_modules/app/bar
Maintenant, vous pourrez require('app/foo')
ou require('app/bar')
depuis n'importe où dans votre application.
Dans votre .gitignore
, ajoutez simplement une exception pour node_modules/app
:
node_modules/*
!node_modules/app
Si votre application a configuré package.json transforme, vous devrez créer une package.json séparée avec sa propre transformation dans votre domaine node_modules/foo
ou node_modules/app/foo
répertoire composants , car les transformations ne sont pas applicables à travers les frontières du module. Cela rendra vos modules plus robustes contre les changements de configuration dans votre application et il sera plus facile de réutiliser indépendamment les packages en dehors de votre application.
lien symbolique
Une autre astuce pratique si vous travaillez sur une application dans laquelle vous pouvez créer des liens symboliques et n'avez pas besoin de prendre en charge Windows est de créer un lien symbolique vers un dossier lib/
ou . Depuis la racine du projet, faites:app/
node_modules
ln -s ../lib node_modules/app
et maintenant de n'importe où dans votre projet, vous serez en mesure d'exiger des fichiers en lib/
faisant require('app/foo.js')
pour obtenirlib/foo.js
.
chemins personnalisés
Vous pourriez voir certains endroits parler de l'utilisation de la $NODE_PATH
variable d'environnement ouopts.paths
d'ajouter des répertoires pour le nœud et browserify pour rechercher des modules.
Contrairement à la plupart des autres plates-formes, l'utilisation d'un tableau de répertoires de chemin d'accès de style shell avec $NODE_PATH
n'est pas aussi favorable dans le nœud que l'utilisation efficace du node_modules
répertoire.
Cela est dû au fait que votre application est plus étroitement couplée à une configuration d'environnement d'exécution, donc il y a plus de pièces mobiles et votre application ne fonctionnera que lorsque votre environnement sera correctement configuré.
node et browserify supportent tous les deux mais découragent l'utilisation de
$NODE_PATH
.