Nœud exiger chemin absolu
J'ai un répertoire qui ressemble à ceci:
-- app/
|- models/
|- user.js
|- config.json
Je veux que mon user.js
fichier pour exiger config.json
. Actuellement, j'utilise require('/config')
mais ce n'est pas de travail. Ce que je fais mal? J'aimerais éviter d'utiliser require('../config')
.
Problème similaire: stackoverflow.com/questions/10860244/...
OriginalL'auteur user2066880 | 2014-01-20
Vous devez vous connecter pour publier un commentaire.
La réponse simple est que vous ne faites rien de mal. Par un peu de recherche, le besoin de la fonction de recherche un de:
Voir: http://www.bennadel.com/blog/2169-Where-Does-Node-js-And-Require-Look-For-Modules-.htm
Et: http://nodejs.org/api/modules.html#loading_from_node_modules_Folders
À la fois de ressources de référence ci-dessus la capacité de modifier un NODE_PATH variable d'environnement, cependant cela sonne comme une très mauvaise pratique et à un minimum serait de rendre votre code de façon moins portable. Elle aussi ne serait probablement pas le même travail pour un fichier comme config.json depuis, bien que je ne l'avais jamais fait, j'imagine que la modification de la NODE_PATH variable uniquement des modifications si besoin() recherche pour le package.des fichiers json correspondant à de véritables modules.
En résumé, voir: Comment faire de l'exiger dans node.js toujours par rapport à la racine du dossier du projet? comme mentionné ci-dessus par Piotr Kowalczuk. Pour ce poste, vous avez deux options réelles:
Enfin, il suffit de garder à l'esprit que ce que vous essayez de faire va à l'encontre du programme que vous utilisez. Je pense que c'est un cas où vous finirez par vous rendre la vie plus facile (et vos collaborateurs!) par aller avec le grain de Nœud et de l'aide par rapport chemins d'accès de fichier que la conception a l'intention.
OriginalL'auteur Owen
Je ne pouvais pas trouver une meilleure solution que d'écrire un module .
Donc, j'aime le code propre et une telle laideur chemin à l'intérieur de la
require
a été de me tuer. J'ai trouvé beaucoup de solution comment résoudre le problème, mais ce que j'ai aimé était parfait sous les systèmes Linux, mais pas pour Windows. Alors je décide de le fixer.Sexy exiger
Après un essai dans certains projets, j'ai décidé de faire open source .
Prise en main
Trois étapes simples à utiliser.
Installer le paquet:
npm install sexy-require --save
Inclure
require('sexy-require')
une fois sur le haut de votre fichier principal de l'application.Étape facultative. Configuration de chemin d'accès peut être défini dans
.paths
fichier sur la racine de votre projet.Liste de chemins
N'importe où dans votre projet, vous pouvez obtenir le raccourci défini par les chemins:
Chemin d'accès à partir d'un dossier de projet ne fonctionne pas.
pourriez-vous ouvrir le ticket sur github et vous donner plus d'informations sur la façon dont vous le problème? Je vais essayer de corriger.
étrange, pourquoi ai-je moins pour ma réponse, est-ce un faux?
Essayez encore une fois. Ou vous pouvez star sur github
OriginalL'auteur sultan
Il semble que le module de chargement de la fonctionnalité ajoute
node_modules/
à l'argument. Par exemple, placez le script suivant dans/tmp/t.js
:créer (
mkdir
) le/tmp/node_modules/
et essayer de l'exécuter avec BSDktrace
(ou Linux'strace
, qui fournit des fonctionnalités comparables). Nœud va tenter d'ouvrir le suivant:/tmp/node_modules/meow/meow.js
/tmp/node_modules/meow/meow.js.js
/tmp/node_modules/meow/meow.js.json
/tmp/node_modules/meow/meow.js.node
/tmp/node_modules/meow/meow.js/package.json
/tmp/node_modules/meow/meow.js/index.js
/tmp/node_modules/meow/meow.js/index.json
/tmp/node_modules/meow/meow.js/index.node
Si vous n'avez pas le
node_modules/
sous-répertoire suivant de votre script, il ne sera pas la recherche de n'importe où par rapport à votre script à tous.OriginalL'auteur Mikhail T.