1. 语法
1.1 ES Module
导出:export / export default
导入: import * from 'module'
1.2 Commonjs
导出:module.exports
导入:const module = require('module')
2. 特性
2.1 ES Module
静态引入、编译时引入(支持Tree shaking 按需加载)
2.2 Commonjs
动态引入、执行时引入
require/exports 是运行时动态加载,import/export 是静态编译
CommonJS 加载的是一个对象(即 module.exports 属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。- 阮一峰
require/exports 输出的是一个值的拷贝,import/export 模块输出的是值的引用。
若两个文件同时引用一个模块,改变模块内的值时,require引入的模块内的值不会改变,而import引入的模块内的值会改变。