1.
导出为一个对象:
index.js
const fs = require("fs");
// 定义一个全局变量,将a.js中的变量放入其中
const myExports = {};
// 同步读取文件
var data = fs.readFileSync("a.js");
// 执行a.js,将a.js中的变量放入myExports中
eval(data.toString())(myExports);
console.log(myExports.count); // 2
//a.js
(function () {
return function (obj) {
obj.count = 2;
};
})();
封装为一个函数:
function myRequire(modulePath) {
const fs = require("fs");
// 定义一个全局变量,将a.js中的变量放入其中
const myExports = {};
// 同步读取文件
var data = fs.readFileSync(modulePath);
// 执行a.js,将a.js中的变量放入myExports中
eval(data.toString())(myExports);
return myExports;
}
const myExports = myRequire("a.js");
console.log(myExports);
加入缓存,为了再次导入直接使用缓存,而不是重新导入一遍:
var caches = {};
function myRequire(modulePath) {
if (caches[modulePath]) {
return caches[modulePath].export;
}
const fs = require("fs");
// 定义一个全局变量,将a.js中的变量放入其中
var myModule = {
path: modulePath, //模块路径
export: {}, //模块导出的变量
};
// 同步读取文件
var data = fs.readFileSync(modulePath);
// 执行a.js,将a.js中的变量放入myExports中
eval(data.toString())(myModule.export);
// 放入缓存
caches[modulePath] = myModule;
return myModule.export;
}
const myExports = myRequire("a.js");
const myExports2 = myRequire("a.js");
console.log(myExports);
console.log(myExports2);
console.log(caches);
参考这个改了改:【JS模块】common JS 规范 看这一篇足够了_commonjs规范_a黑大帅`的博客-CSDN博客