【问题标题】:What is the difference between require('mypackage.js') and require('mypackage')?require('mypackage.js') 和 require('mypackage') 有什么区别?
【发布时间】:2013-03-06 12:03:49
【问题描述】:

这两个require 语句的工作方式似乎相同:

var Mypackage = require('mypackage.js');

var Mypackage require('mypackage');

它们之间有区别吗?

【问题讨论】:

  • 社区倾向于使用第二种。

标签: node.js require


【解决方案1】:

答案如下:

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 将开始搜索名为 node_modules 的目录。
    它将从当前目录开始(相对于Node.JS 中的当前执行文件),然后沿着文件夹层次结构向上移动,检查每个级别的 node_modules 文件夹。 一旦Node.JS 找到node_modules 文件夹,它将尝试将给定的模块加载为(.js)JavaScript 文件或命名的子目录;如果找到命名的子目录,它将尝试以各种方式加载文件。所以,例如
  3. 如果您请求加载模块,“utils”及其目录不是 .js 文件,则:
    Node.JS 将在分层目录中搜索 node_modulesutils 通过以下方式:
    ./node_modules/utils.js
    ./node_modules/utils/index.js
    ./node_modules/utils/package.json
  4. 如果Node.JS在上述步骤中仍然找不到该文件,Node.js将开始从环境变量中查找目录路径,即NODE_PATH设置在您的机器上(显然如果您在 Windows 上,则由 Node.JS 安装程序文件设置) 然后在上述所有步骤中未找到,将堆栈跟踪打印到 stder
    例如Error:Cannot find module 'yourfile'
    更多信息:链接是here 甚至循环的require()也解释得很好。

【讨论】:

  • 你对答案不服气?考虑上面的逻辑并认为你正在编写一个算法然后通过这个link
猜你喜欢
  • 1970-01-01
  • 2013-05-16
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
相关资源
最近更新 更多