9
votes

Nodejs requis.Paths résoudre le problème

J'essaie d'exiger un fichier relativement et mystérieusement ce qui suit se passe

Ceci fonctionne bien, ce qui pointe sur /users/marcos/desktop/taper/lib/utils.js xxx

Ce n'est pas que cela ne doit pas indiquer exactement le même fichier: xxx

Quelqu'un sait pourquoi je ne peux pas toujours utiliser ./ dans ce cas pour charger le chemin depuis xxx

résulte: xxx

de toute façon?

Merci d'avance


3 Réponses :


17
votes

mis à jour:

du Documentation :

Un module préfixé avec '/' est un chemin absolu vers le fichier. Pour exemple, exiger ('/ home / marco / foo.js') chargera le fichier à /home/marco/foo.js .

Un module préfixé avec './' est relatif au fichier appelant exiger () . C'est-à-dire, cercle.js doit être dans le même répertoire que foo.js pour nécessite ('./ cercle') pour le trouver.

sans leader '/' ou './' pour indiquer un fichier, le module est soit un "module de base" ou est chargé à partir d'un dossier node_modules .

Si le chemin donné n'existe pas, nécessite () lancera une erreur avec Son code défini sur 'module_not_found' .


Voici la réponse originale, qui fait référence à exiger.Paths (ce qui n'est plus pris en charge):

à partir du Documentation :

dans le nœud, exiger.Paths est une matrice de chaînes qui représentent des chemins à rechercher des modules quand ils ne sont pas préfixés avec '/' , < code> './' ou '../' .

(mettre l'accent sur le mien)


3 commentaires

Ah OK, maintenant cela a du sens :) Donc, si certaines des cordes ci-dessus sont mentionnées, cela ignore simplement la section des chemins. Donc je suppose qu'il n'y a aucun moyen de réaliser cela alors malheureusement, merci Martjin


Peut-être une bonne solution pour cela serait de trouver et de remplacer ces préfixes de processus.stdin et ajoute le processus.cwd () à celui-ci :) pourrait fonctionner


@LUDICCO: N'est-il pas possible que vos utilisateurs puissent mettre utils.js dans un Node_Modules / Annuaire quelque part sur le chemin?



6
votes

Vous pouvez transmettre qu'utiliser node_path

exemple: xxx


1 commentaires

Vous êtes un sauveur! BC Certaines personnes gèrent simplement leur code de base comme celle-ci: exiger ('lib / mongo / get-db'); . Et je dois trouver comment courir cette chose!



3
votes

J'ai créé un nouveau module de noeud appelé rekuire .

Cela vous permet de "exiger" sans utiliser des chemins relatifs.

C'est un économiseur de temps élevé en matière de test / refactoring.

https://npmjs.org/package/rekuire


2 commentaires

Je regardais le code source de rekuire et je remarquais qu'il commence à rechercher des fichiers JS en faisant ./../../../../. Cela signifie-t-il si j'ai quelques projets de nœud dans le même dossier racine, qu'ils pourraient finir par partager le code?


Non, il s'agit simplement d'établir le dossier de base, j'ai spécifiquement empêché les modules saignants entre les dépendances.