We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在node的模块系统中,每个文件都被视为一个独立的模块
使用require.main === module来判断模块是不是文件是不是直接被运行
通过检查require.main.filename来获取当前应用程序的入口点
获取require()是加载的确切的文件,使用require.resolve() 函数
require.resolve()
module:首先module的自由变量是表示当前模块的对象的引用。
require.main:这个模块对象是由引用这个模块的模块创建的,如果直接使用node执行这个模块,那个直接require.main === module是相等
module是模块内部对象的指向,require.main 是由外部引用模块的module对象,那么针对外部引用的方式,那么我们可以得知下面这个等式成立:
util.isDeepStrictEqual(module.parent, require.main)
module函数的举例:
// index.ts import mod from 'module'; console.log(module.filename); console.log(require.main.filename) console.log(util.isDeepStrictEqual(module.parent, require.main));
// global import './index'; console.log(require.main === module)
// 执行 node global /Users/ligen/code/github/nodeStudy/build/index.js /Users/ligen/code/github/nodeStudy/build/gobal.js true // 外部调用 true // 内部调用
缓存的影响:模块在第一次加载后会被缓存,多次调用require会导致整个模块返回完全相同的对象,如果和模块缓存结合起来,那么我们可以判断模块的module是一次生成,同样针对require.main 也是相同,相关值都将被缓存起来
// global const { fun } = require('./buffer'); fun(); require('./index');
// buffer exports.fun = () => { console.log(module); console.log(require.main); }
const { fun } = require('./buffer'); fun();
global中执行结果: Module { id: '/Users/ligen/code/github/nodeStudy/build/buffer.js', exports: { fun: [Function] }, parent: Module { id: '.', exports: {}, parent: null, filename: '/Users/ligen/code/github/nodeStudy/build/gobal.js', loaded: false, children: [ [Circular] ], paths: [ '/Users/ligen/code/github/nodeStudy/build/node_modules', '/Users/ligen/code/github/nodeStudy/node_modules', '/Users/ligen/code/github/node_modules', '/Users/ligen/code/node_modules', '/Users/ligen/node_modules', '/Users/node_modules', '/node_modules' ] }, filename: '/Users/ligen/code/github/nodeStudy/build/buffer.js', loaded: true, children: [], paths: [ '/Users/ligen/code/github/nodeStudy/build/node_modules', '/Users/ligen/code/github/nodeStudy/node_modules', '/Users/ligen/code/github/node_modules', '/Users/ligen/code/node_modules', '/Users/ligen/node_modules', '/Users/node_modules', '/node_modules' ] } Module { id: '.', exports: {}, parent: null, filename: '/Users/ligen/code/github/nodeStudy/build/gobal.js', loaded: false, children: [ Module { id: '/Users/ligen/code/github/nodeStudy/build/buffer.js', exports: [Object], parent: [Circular], filename: '/Users/ligen/code/github/nodeStudy/build/buffer.js', loaded: true, children: [], paths: [Array] } ], paths: [ '/Users/ligen/code/github/nodeStudy/build/node_modules', '/Users/ligen/code/github/nodeStudy/node_modules', '/Users/ligen/code/github/node_modules', '/Users/ligen/code/node_modules', '/Users/ligen/node_modules', '/Users/node_modules', '/node_modules' ] } index中执行结果: Module { id: '/Users/ligen/code/github/nodeStudy/build/buffer.js', exports: { fun: [Function] }, parent: Module { id: '.', exports: {}, parent: null, filename: '/Users/ligen/code/github/nodeStudy/build/gobal.js', loaded: false, children: [ [Circular], [Object] ], paths: [ '/Users/ligen/code/github/nodeStudy/build/node_modules', '/Users/ligen/code/github/nodeStudy/node_modules', '/Users/ligen/code/github/node_modules', '/Users/ligen/code/node_modules', '/Users/ligen/node_modules', '/Users/node_modules', '/node_modules' ] }, filename: '/Users/ligen/code/github/nodeStudy/build/buffer.js', loaded: true, children: [], paths: [ '/Users/ligen/code/github/nodeStudy/build/node_modules', '/Users/ligen/code/github/nodeStudy/node_modules', '/Users/ligen/code/github/node_modules', '/Users/ligen/code/node_modules', '/Users/ligen/node_modules', '/Users/node_modules', '/node_modules' ] } Module { id: '.', exports: {}, parent: null, filename: '/Users/ligen/code/github/nodeStudy/build/gobal.js', loaded: false, children: [ Module { id: '/Users/ligen/code/github/nodeStudy/build/buffer.js', exports: [Object], parent: [Circular], filename: '/Users/ligen/code/github/nodeStudy/build/buffer.js', loaded: true, children: [], paths: [Array] }, Module { id: '/Users/ligen/code/github/nodeStudy/build/index.js', exports: {}, parent: [Circular], filename: '/Users/ligen/code/github/nodeStudy/build/index.js', loaded: false, children: [Array], paths: [Array] } ], paths: [ '/Users/ligen/code/github/nodeStudy/build/node_modules', '/Users/ligen/code/github/nodeStudy/node_modules', '/Users/ligen/code/github/node_modules', '/Users/ligen/code/node_modules', '/Users/ligen/node_modules', '/Users/node_modules', '/node_modules' ] }
循环引用情况处理:
// a.js console.log('a 开始'); exports.done = false; const b = require('./b.js'); console.log('在 a 中,b.done = %j', b.done); exports.done = true; console.log('a 结束');
// b.js console.log('b 开始'); exports.done = false; const a = require('./a.js'); console.log('在 b 中,a.done = %j', a.done); exports.done = true; console.log('b 结束');
// main.js console.log('main 开始'); const a = require('./a.js'); const b = require('./b.js'); console.log('在 main 中,a.done=%j,b.done=%j', a.done, b.done);
// output main 开始 a 开始 b 开始 在 b 中,a.done = false b 结束 在 a 中,b.done = true a 结束 在 main 中,a.done=true,b.done=true
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在node的模块系统中,每个文件都被视为一个独立的模块
文档部分
理解部分
使用require.main === module来判断模块是不是文件是不是直接被运行
通过检查require.main.filename来获取当前应用程序的入口点
获取require()是加载的确切的文件,使用
require.resolve()
函数1、module 和require.main 之间的关联
module:首先module的自由变量是表示当前模块的对象的引用。
require.main:这个模块对象是由引用这个模块的模块创建的,如果直接使用node执行这个模块,那个直接require.main === module是相等
module是模块内部对象的指向,require.main 是由外部引用模块的module对象,那么针对外部引用的方式,那么我们可以得知下面这个等式成立:
module函数的举例:
缓存的影响:模块在第一次加载后会被缓存,多次调用require会导致整个模块返回完全相同的对象,如果和模块缓存结合起来,那么我们可以判断模块的module是一次生成,同样针对require.main 也是相同,相关值都将被缓存起来
2、循环引用情况说明
循环引用情况处理:
The text was updated successfully, but these errors were encountered: