CommonJS和ESM的区别
5views
CMJ:社区标准,跟随Node
出来的。因为是出自于社区,因此语法层面等官方东西无法改变,只能在API
层面上改动,所以开发出来一个require
函数。
ESM:官方标准。是官方新增了语法,属于语法层面的改动。
CMJ:运行时,将模块放在函数中,exports
、module
、__dirname
、__filename
等其实都是这个函数的参数。
比如这段代码:
ESM:运行时(import(xxx)
) + 编译时(静态: import xx from xx;
)。
所以这样的代码是无效的:
因为其编译时的静态特点,可以在运行代码之前就能确定依赖关系,因此可以用来tree shaking
。
commonJS中可以这样:
而
ESM
中是绝对不行的。