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导入的是值的拷贝
参考:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY