es6-模块化
es5中,用module.exports 和 exports导出模块,用require引入模块
es6中,新增export 和 export default 导出模块,import引入模块
- module.exports 和 exports 的区别:
module.exports 和 exports 导出的对象,可以在另一个文件中通过require引用
module 和 exports 是node.js给每个js文件内置的两个对象,初始值:
1 | console.log(exports): {} 空对象 |
一开始这两个对象都是空对象{},实际上这两个对象指向同一块内存
exports.age = 18 和 module.exports.age = 18 两者是等价的
但是require引入的本质是module.exports,所有当module.exports 和exports
指向的不是同一块内存时,exports的内容就会失效:例如
1 | a.js: |
- export default 和 export 的区别:
1 | const People = { name: 'lucy' ,age: 18 } |
导入: import {a,b} from ‘./a’
导出时, export 相当于将对象添加到module 的 exports中,
export default 相当于将对象添加到module 的 exports ,对象key 为default
导入时:
不带{}的导入,本质上就是导入exports的default属性,若default属性不存在,
则导入exports对象
带{}的导入,按key值导入exports中对应的属性值
一般来说,module.exports和exports与require对应。也就是用module.exports和exports
导出的模块,则用require导入。(不是绝对,如果代码支持es6,也可以用import引入)。