javascript - nodejs 模块问题?
天蓬老师
天蓬老师 2017-04-10 15:31:04
[JavaScript讨论组]

看了阮叔的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,他们不是凭空而来的。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
高洛峰

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

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

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

阿神

因为你引用了nodejs

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号