oakland / tecblog

My tech blogs
4 stars 0 forks source link

commonjs vs es modules #283

Open oakland opened 3 years ago

oakland commented 3 years ago

https://github.com/leefinder/blogs/tree/master/js-think/CommonJS-ES6Module https://juejin.cn/post/6844904137159606285

其实最本质的区别就是“动态”和“静态”,正是因为动态和静态,才出现了 commonjs 是值的拷贝,而 es modules 是值的引用。 正是因为动态静态,才导致一个是在运行时加载,一个是在编译时加载。

真正要理解 commonjs 和 es modules 的区别,其实要理解两种模块化体系出现的原因和场景。commonjs 是在服务端,因此可以同步加载,所以是在运行时动态加载,而 esmodule 是语言层面的模块化,就必须要考虑客户端场景,所以必然是静态的,在打包时确定的,请求获得值之后,所有对值的操作和修改都会反应在这个模块上,因为不能再次去请求这个模块,异步的成本太高了。所以一定是静态的。