require('mypackage.js')和require('mypackage')有什么区别?
这两个require
陈述似乎以相同的方式工作:
var Mypackage = require('mypackage.js');
var Mypackage require('mypackage');
他们之间有区别吗?
答案是:
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; };
- Node.JS会查看给定的模块是否是核心模块。 (例如
http
,fs
等)始终在加载模块中占优先。 - 如果给定的模块不是核心模块(例如
http
,fs
等),则Node.js将开始search名为node_modules
的目录。
它将从当前目录(相对于Node.JS中当前正在执行的文件)开始,然后沿着文件夹层次结构查找,检查每个级别的node_modules文件夹。 一旦Node.JSfindnode_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()解释得非常好。