commonJs和ESModule的区别

1. 规范的区别

ESM模块的导入使用Import关键字,导出使用export关键字。

commonJs导入使用require关键字,导出使用module.export

 

2. 文件名后缀不一样(这一点不用记,针对Node)

在node.js,默认将 .js后缀文件识别为CJS模块,.cjs也是CJS模块 ,.mjs文件识别为esm模块。

 

3. 模块加载时机不一样

CJS支持动态加载模块(require语句可以出现在任意位置)

ESM是静态解析的,它会在所有模块都加载完毕后才执行代码,在编译时首先解析模块中的导入语句,虽然通常会将导入语句放在模块的顶部,但并不是要求所有的import语句必须在文件的顶部,只要在使用导入的内容之前进行导入即可。

因此ESM可以在代码执行前进行静态分析和优化,从而提高性能(比如自动移除无用的死代码,webpack的treeshaking就是利用了这点)带你了解 Tree Shaking - 掘金 (juejin.cn)

而CJS需要等到代码允许时才能确定依赖关系和加载模块。

 

4. 导出内容的区别

ESM导入的是值的引用,而CJS导入的是值的拷贝

 

参考:

Node.js 入门教程 - 粥里有勺糖 - 掘金小册 (juejin.cn)

posted @   飞向火星  阅读(408)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示