基本已经搞懂了这个帖子说的意思了,但是还有一个地方想不太明白。
require()
函数是在node/lib/internal/module.js
中makeRequireFunction()
定义的,但是在源码最前面就有调用const errors = require('internal/errors');
。
那自然是require()
已经定义了,我在node/lib/internal/bootstrap_node.js
找到了
const { makeRequireFunction } = NativeModule.require('internal/module');
// ...
addCommandLineAPI('require', makeRequireFunction(consoleAPIModule));
但是const { makeRequireFunction } = NativeModule.require('internal/module');
中在第一句const errors = require('internal/errors');
会因为没有定义require()
出错的呀。
把1年前的问题又翻出来问一遍,实在有些抱歉,但是希望能帮我解答一下,const { makeRequireFunction } = NativeModule.require('internal/module');
到底是在那里定义的。
其实没看懂你在问啥,不过看起来你找的完全不对 要说普通模块里面的 require,定义在 lib/internal/module.js 里面 至于 bootstrap_node.js 中的 require 因为此时还没有加载 lib/module.js ,所以全都是采用的 NativeModule.require,它的定义就在这个文件里
不好意思,表述能力确实差。
你说的我知道,但是lib/internal/module.js
中,第一句就是const errors = require('internal/errors');
,这个require
不会冲突么,在定义之前调用。
@Zerxoi module.js 整个生命周期第一次被引用是在 bootstrap_node.js 中,如下:
const { makeRequireFunction } = NativeModule.require('internal/module');
这里的 NativeModule.require 也会注入 exports、NativeModule.require 到 internal/module 这个文件里,你看到的 require(‘internal/errors’) 就是调用注入的 NativeModule.require
仔细看下 NativeModule.require 的实现就知道了
明白了,谢谢你的帮助。