首先index.js module1.js module2.js在同一级目录,这个$require是为了简单实现node中require的功能,让index.js依赖module1.js,module1.js依赖module2.js,但是为什么index中写的$require在module1.js中也可以使用呢?
以下是主文件index.js内容
function $require(id) {
const fs = require('fs');
const path = require('path');
const filename = path.join(__dirname, id);
const dirname = path.dirname(filename);
let code = fs.readFileSync(filename, 'utf8');
let module = { id: filename, exports: {} };
let exports = module.exports;
code =`${code}`;
eval(code);
return module.exports;
}
var m1 = $require('./module1.js');
m1.a.say();
m1.b.say();
利用重写的$require去依赖module1.js
var module2 = $require('./module2.js');
module.exports = {
a:{
say:()=>{
console.log('module1 say');
}
},
b:module2
};
这里是module1.js依赖的module2.js
module.exports = {
say: () => {
console.log('module2 say');
}
};
node的模块不都是独立的私有空间吗?通过这种方式在index.js简单重写的$require并没有暴露出去,为什么在它所依赖的module1.js中也可以使用,进而正常执行这两个方法呢(m1.a.say(); m1.b.say();)
node初学,求前辈解惑,感激不尽.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
欢迎选择我的课程,让我们一起见证您的进步~~