Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting a path for require in node.js

I have a folder structure like this.

  • include/

    • index.js
    • plugin/

      • plugin.js
      • helper.js

Where:-

include/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');

I want to map the path of require in plugin.js file so that all require call should search for its module in the same directory only.

like image 884
Robins Gupta Avatar asked Oct 18 '25 13:10

Robins Gupta


2 Answers

You might be able to dynamically change the NODE_PATH environment variable:

// 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;
like image 107
Andreas Louv Avatar answered Oct 21 '25 02:10

Andreas Louv


Try changing the NODE_PATH variable via the command line:

exports NODE_PATH=directoryYouWant

If you don't want to have to change it for every other project, you could try just dynamically changing it in you .js file:

var currentNodePath = process.env.NODE_PATH;
process.env.NODE_PATH = directoryYouWant;
//do stuff then change it back
process.env.NODE_PATH = currentNodePath;
like image 25
jrkt Avatar answered Oct 21 '25 02:10

jrkt