更改node_modules位置

有没有办法改变node_modules文件夹的位置?

例如:

- dir1 - dir2 - node_modules 

至:

 - dir1 - dir2 - node_modules 

以下是默认查找int node_modules文件夹的代码

 Module.prototype.load = function(filename) { debug('load ' + JSON.stringify(filename) + ' for module ' + JSON.stringify(this.id)); assert(!this.loaded); this.filename = filename; this.paths = Module._nodeModulePaths(path.dirname(filename)); var extension = path.extname(filename) || '.js'; if (!Module._extensions[extension]) extension = '.js'; Module._extensions[extension](this, filename); this.loaded = true; }; 

所以,以下是确切的search模式:

  1. Node.JS会查看给定的模块是否是核心模块。 (例如httpfs等)始终在加载模块中占优先。

  2. 如果给定的模块不是核心模块(例如httpfs等),则Node.js将开始search名为node_modules的目录。

    它将从当前目录(相对于Node.JS中当前正在执行的文件)开始,然后沿着文件夹层次结构查找,检查每个级别的node_modules文件夹。 一旦Node.JSfindnode_modules文件夹,它将尝试加载给定的模块,作为(.js)JavaScript文件或命名的子目录; 如果它find了指定的子目录,它将尝试以各种方式加载文件。 所以,例如

  3. 如果您提出加载模块的请求,“utils”及其目录不是.js文件,则:
    Node.JS将通过以下方式searchnode_modulesutils的分层目录:

     ./node_modules/utils.js ./node_modules/utils/index.js ./node_modules/utils/package.json 
  4. 如果Node.JS仍然无法在上述步骤中find该文件,Node.js将开始查看环境variables的目录path,即在您的机器上设置的NODE_PATH(如果您在Windows上显然由Node.JS安装程序文件设置)在上述所有步骤中找不到,然后打印一个堆栈跟踪到stder
    例如Error: Cannot find module 'yourfile'
    欲了解更多信息:链接在这里甚至循环require()解释得非常好..

实际上,我们甚至可以编辑其中最后一行的nodevars.bat文件:

if "%CD%\"=="%~dp0" cd /d "%HOMEDRIVE%%HOMEPATH%"

我们可以指定我们自己的目录,而不是照顾用户的主目录:

%HOMEDRIVE%%HOMEPATH%

这样node-modules-location会自动被closures。