更改node_modules位置

时间:2013-09-24 06:28:44

标签: node.js npm

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

例如:

- dir1
- dir2
- node_modules

为:

- dir1
- dir2
    - node_modules

2 个答案:

答案 0 :(得分:48)

以下是默认情况下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;
};

因此,以下是确切的搜索模式:

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

  2. 如果给定的模块不是核心模块(例如httpfs等),Node.js将开始搜索名为 {的目录。 {1}}

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

  3. 如果您请求加载模块,“utils”及其目录而不是.js文件,则:Node.JS将在分层目录中搜索node_modulesnode_modules通过以下方式:

    utils
  4. 如果Node.JS仍无法在上述步骤中找到该文件,Node.js将开始从环境变量中查看目录路径,即 ./node_modules/utils.js ./node_modules/utils/index.js ./node_modules/utils/package.json 在您的机器上设置(如果您在Windows上,显然由Node.JS安装程序文件设置) 然后,在上述所有步骤中找不到,将堆栈跟踪打印到stder 例如 NODE_PATH Error:
    有关更多信息:链接为here,即使循环require()也能得到很好的解释。

答案 1 :(得分:1)

实际上,我们甚至可以编辑最后一行所在的at vec1 1 vec2 is { 2 3 4 5 6 7 } at vec1 2 vec2 is { 2 3 4 5 6 7 1 1 1 1 1 1 } at vec1 3 vec2 is { 2 3 4 5 6 7 1 1 1 1 1 1 2 2 2 2 2 } at vec1 4 vec2 is { 2 3 4 5 6 7 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 } at vec1 5 vec2 is { 2 3 4 5 6 7 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 } at vec1 6 vec2 is { 2 3 4 5 6 7 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 5 5 } 文件:

nodevars.bat

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

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

以便node-modules-location自动处理。