首页 > nodejs 模块问题?

nodejs 模块问题?

看了阮叔的require()源码解读,对nodejs的模块机制有了大概的了解。
不过有个问题,比如说写个模块,路径为path,直接在命令行输入node path是可以执行的

var tool = require('./tool');
exports.add = function(a,b){
    return a+b;
}
console.log(module.id);

那么这个模块的requireexportsmodule是哪来的?


如果没有明白我的意思,我再多做一点解释:
根据阮叔在文章中的解读,之所以通过require加载的模块可以使用requireexportsmodule,是因为:

 (function (exports, require, module, __filename, __dirname) {
  // 模块源码
})(...)

也就相当于注入了requireexportsmodule,他们不是凭空而来的。


因为你引用了nodejs


在命令行敲 node path 发生了什么呢?
我们来看node的源码,这里我看的是0.12.6
首先出场的是 node_main.cc
这个是node工具的入口函数,清晰可以见的 wmain 和main
然后发现他是调用 node::Start 函数。
接着出场的就是 node.cc
查看 Start 函数,发现里面最有趣的是 LoadEnvironment(env) 函数,接着去看看
发现这样一片代码:

重点在第一句话,发现 node.js 这个文件被注入了,这个文件就在源代码里,接着我们看看这个

发现楼主说的注入就在这里了,然后我们回过去捋一捋 path 的加载过程,就发现是用这里来加载的,然后就没有然后了。
楼主要学会看源码。

【热门文章】
【热门文章】