javascript - nodejs 模块问题?

 princess-小熙_351 发布于 2022-11-22 02:09

看了阮叔的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 个回答
  • 因为你引用了nodejs

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

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

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

    2022-11-22 03:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有