commonjs 原理学习

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博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值