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 @ 2024-09-18 10:23  飞向火星  阅读(200)  评论(0编辑  收藏  举报