javascript - nodejs require方法简单重写(这么长的代码也可以看一看的么么哒.......)
天蓬老师
天蓬老师 2017-04-11 09:10:20
[JavaScript讨论组]

首先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初学,求前辈解惑,感激不尽.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号