es6和commonjs模块化规范的深入理解

总结:两种方式都是使用一个对象作为对外接口,es6使用的是Module这个实例对象,commonjs使用的是module.exprots这个对象。不同的是Module这个实例对象是不能直接操作的,而module.exports这是我们可以直接在js中操作的一个对象。

ES6模块化:

javascript 复制代码
const a = 1

function add(x,y) {
    return x+y
}

export {a}  // 注意这里并不是导出一个对象,而是导出数据的列表

export default add

将其在另一个模块中引入并打印在控制台的结果:

很容易看出,实际上export 和 export default做的事情并不是导出数据,而是向Module这个对象中添加数据。

CommonJS模块化:

这个规范的导出方式其实都是在操作module.exports这个对象,exports实际上只是提供的一个简写,exports也是指向module.exports这个对象的,我们可以直接操作这个对象,往这个对象里面添加属性,或者直接module.exports = {},直接导出一个新的对象。

两者的导入表象上来看都是从对象身上解构数据,es6模块化是从Module这个对象身上解构,commonjs是从module.exports这个对象上解构。但是冲命名的方式不一样,es6是as语法,commonjs是:

相关推荐
百万蹄蹄向前冲15 分钟前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
默_笙18 分钟前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan2 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen2 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理3 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒3 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche15004 小时前
利用 RAG 为答疑机器人扩展知识范围
前端
天若有情6734 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
SoonITer4 小时前
怎样构建一个 Agent-friendly 的网站
前端·agent
颜进强4 小时前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程