require&import区分?
CommonJS中,我们用module.exports和require来导出和导入模块,而到了ES6却变成了export和import了,这两者到底有什么区别呢?
一句话总结:CommonJS模块是运行输出(加载)一个值(或对象)的拷贝,而ES6模块则是编译时输出(加载)一个值的引用(或者叫做连接).
这样的差异在平常使用是不易被察觉的,可是一旦出现循环引用,两者的差异就很明显了。直接的循环引用(a引用b,b又引用a)一般不会有,但在依赖关系复杂的大项目中,很容易出现a引用b,b引用其它模块,在若干次引用后,模块n又引用回a这样的情况。为了讲解的方便我们直接构造出一个a,b相互引用的项目。
require OR importrequire OR import
NodeJS和CommonJS之间的关系?
CommonJS是一种规范,NodeJS是这种规范的实现。
CommonJS规范
为什么模块规范的设计会有不同区别
模块规范发展历史