2010-12-05 19 views
5

Je suis en train de modules d'accès, mais l'imbrication devient un peu hors de la mainaccès modules relativement à partir d'une racine fixe avec besoin dans NodeJS

require("../../../Folder/Deeper/someFile")

est-il de toute façon à utiliser simplement require("Folder/Deeper/somefile")

J'ai essayé d'installer

require.paths = ['/media/work/Project'];

mais cela ne semble pas fonctionner et se sent aussi un peu moche pour moi.

Y a-t-il des alternatives? Est-il possible d'écrire un wrapper pour cela?

Répondre

4

Peut-être que cela?

require.paths.unshift('../../..'); 
require("Folder/Deeper/somefile"); 

http://nodejs.org/api.html dit:

require.paths Un tableau de chemins de recherche pour require(). Ce tableau peut être modifié pour ajouter des chemins personnalisés.

Exemple: ajouter un nouveau chemin d'accès au début de la liste de recherche

require.paths.unshift('/usr/local/node'); 
+0

est require.paths global ou fichier local? – Raynos

+0

@Raynos: afaik global – thejh

+1

mon erreur définissait require.paths = [...] au lieu d'utiliser unshift. Je ne peux pas croire que cela l'a corrigé. – Raynos

0

Mettez votre application dans un dossier à la racine de l'application (par exemple, ./app), puis liaison souple dans node_modules comme ceci:

ln -s ../app ./node_modules 

(Notez le double point avant app.)

Cela vous permettra de require modules de votre racine de l'application:

require('app/route/api') 

Pour plus de commodité, de l'inclure dans package.json comme un script postinstall à exécuter sur chaque npm install:

"scripts": { 
    "postinstall": "ln -sf ../app ./node_modules" 
} 

Windows n'a pas ln , donc les utilisateurs de Windows devront créer un lien symbolique manuellement. Il peut ou peut ne pas fonctionner sur Windows.