- 如下代码,写出这段代码的导出结果
ini
// 2.js
this.a = 1;
exports.b = 2;
exports = {
c: 3,
}
module.exports = {
d: 4,
}
exports.e = 5;
this.f = 6;
- 在其他文件导入2.js,可以看到导入结果
javascript
// 1.js
const r = require('./2');
console.log(r)
- 看下require函数做了什么
javascript
function require(modulePath){
// 根据模块的url,判断模块完整的绝对路径
var moduleId = getModuleId(modulePath);
// 判断缓存
if(cache[moduleId]){
return cache[moduleId];
}
// 运行模块代码的辅助函数
function _require(exports, require, module, __filename, __dirname){
// 目标模块在这里运行
}
var module = {
exports: {},
}
var exports = module.exports;
//模块文件的绝对路径
var __filename = moduleId;
// 获取模块所在目录的绝对路径
var __dirname = getDirname(__filename);
_require.call(exports,exports,require,module,__filename,__dirname);
// 添加缓存
cache[moduleId] = module.exports;
// 返回结果
return module.exports;
}
- 知道require的实现应该知道打印的结果了