首先要知道前者和后者是两个不同的规范下的模块导出方式,我们来分别看一下:
CommonJS模块规范
CommonJS规范规定,每个模块内部,module
变量代表当前模块对象。module
的exports
属性就是对外提供的接口,加载该模块时其实就是加载该模块的module.exports
属性。
let a = 10;
let fn = ()+>{
return 1 + 2;
}
module.exports.a = a;
module.exports.fn = fn;
而exports
则是Node为了方便提供的一个简单写法,默认把exports
指向了module.exports
。就相当于在每个模块的头部隐式添加了
let exports = module.exports;
所以,不论用哪种写法最后其实都是利用module.exports
导出。
一定不能对exports进行赋值操作,这样就切断了二者的关联。
exports.a = a;
当然,在CommonJS中引入模块使用的是require
关键字。
ES6模块规范
每一个文件之中都只能有一个export default
,但是可以有多个export
。顾名思义,export default
就是为模块指定默认的输出。
export default let a = 1;
在引用模块的时候,使用import...from...
可以给模块随便起名字
import aa from '';
但是如果是export
导出的变量,在引用时必须和导出时保持一致,如下:
let str = 'hello';
export {str};
export let num = 100;
import {str, num} from ''
网友评论