更改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模式:
-
Node.JS会查看给定的模块是否是核心模块。 (例如
http
,fs
等)始终在加载模块中占优先。 -
如果给定的模块不是核心模块(例如
http
,fs
等),则Node.js将开始search名为node_modules
的目录。它将从当前目录(相对于Node.JS中当前正在执行的文件)开始,然后沿着文件夹层次结构查找,检查每个级别的node_modules文件夹。 一旦Node.JSfind
node_modules
文件夹,它将尝试加载给定的模块,作为(.js)JavaScript文件或命名的子目录; 如果它find了指定的子目录,它将尝试以各种方式加载文件。 所以,例如 -
如果您提出加载模块的请求,“utils”及其目录不是.js文件,则:
Node.JS将通过以下方式searchnode_modules
和utils
的分层目录:./node_modules/utils.js ./node_modules/utils/index.js ./node_modules/utils/package.json
-
如果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。