2015-11-15 3 views
0

J'ai une structure de dossier comme celle-ci.Définition d'un chemin pour require dans node.js

  • include/

    • index.js
    • plugin/

      • plugin.js
      • helper.js

Où: -

comprennent/index.js

//Function for mapping the path of "require" statement in the plugin.js file. 

var mapRequirePath = function(){ 

    var plugins = require('./plugin/plugin'); 
    return plugins; 
} 

//Now call the plugins.. 
var plugin = mapRequirePath(); 

include/plugin/plugin.js

/* 
     I want all four require statements to point to the same file location '/include/plugin/helper.js' 

     i.e search in the same folder location for module irrespective of the '../' or '../../' present in the require statement 
    */ 

    var helper1 = require('./helper'); 
    var helper2 = require('helper'); 
    var helper3 = require('../../helper'); 
    var helper4 = require('../helper'); 

Je veux mapper le chemin de require dans le fichier plugin.js afin que tous nécessitent un appel doit rechercher son module dans le same directory only.

Répondre

2

Vous pourriez être en mesure de modifier dynamiquement la variable d'environnement NODE_PATH:

// First take a backup: 
var _NODE_PATH = process.env.NODE_PATH; 
// Add /includes/plugin to the path, also note that we need to support 
// `require('../hello.js')`. We can do that by adding /includes/plugin/a, 
// /includes/plugin/a/b, etc.. to the list 
process.env.NODE_PATH+=':/includes/plugin:/includes/plugin/a'; 
// Do your think... 
require('./plugins/plugin'); 
// Restore NODE_PATH 
process.env.NODE_PATH = _NODE_PATH; 
2

Essayez de changer la variable NODE_PATH via la ligne de commande:

exports NODE_PATH=directoryYouWant 

Si vous ne voulez pas avoir à changer pour tout autre projet, vous pouvez essayer simplement de changer dynamiquement dans votre fichier .js:

var currentNodePath = process.env.NODE_PATH; 
process.env.NODE_PATH = directoryYouWant; 
//do stuff then change it back 
process.env.NODE_PATH = currentNodePath; 
+0

Cela changerait le chemin du Node pour tous les systèmes de fichiers. Je veux juste le changer seulement dans le cas de l'appel 'require' dans le dossier'/include/plugin' –

+0

Cela pourrait fonctionner, merci +1 pour une bonne réflexion. Mais l'avez-vous réellement testé? – andlrc

+0

Je vois que nous avons eu une idée similaire :) –