4

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.

0

3 Answers 3

6

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;
Sign up to request clarification or add additional context in comments.

1 Comment

This does not seem to work anymore. process.env.NODE_PATH returns undefined for me. But module.paths returns the search paths. That can be changed, but only for a single module, I'd like for it to work for the whole app.
2

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;

2 Comments

That would change the Node path for all filesystem. I just want to change it only in the case of the require call inside /include/plugin folder
I see we had a similar idea :)
1

If your wanna add /foo/bar to require:

  • by editting process.env.NODE_PATH

then your js files should reside inside /foo/bar/node_modules/

process.env.NODE_PATH = '/foo/bar' + ':' + process.env.NODE_PATH;
  • by editting module.paths

then your js files should reside inside /foo/bar/

module.paths.push('/foo/bar');

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.