区分 node / es6 不同的导入导出方式
在前端开发中,书写 js
现在很倡导以模块导入导出的方式来定义不同功能的代码块,可能在很多代码中,会看到类似 exports
, module.exports
, export
, import
, require()
这些导入导出的方式,不知你是否能清楚的区分他们?下面逐一描述一下,这些方式应用的方法和环境。
各自的使用环境
require : node / es6
import/export : es6
module.exports/exports : node
Node.js 中导入导出: module.exports / exports
module.exports / exports
属于 Node.js
的写法, module.exports / exports = {}
初始化时都是一个空对象,他们不同之处在于,module.exports
导出的内容会被 require
识别,但 exports
导出的内容不会被 require
识别,是因为 exports
其实是 module.exports
的一个引用。
module.exports / exports
导出的内容属于 Object
引用类型,传讲一个引用类型时,实际是定义了一个对象,并声明该对象指向该对象内存地址的一个引用。
1 | module.exports.name = '我是 module.exports' |
可以看出,初始化时,exports = {}
指向了 module.exports = {}
,他们的 name
属性指向同一个内存地址,所以在修改 exports.name
的时候,exports.name
和 module.exports.name
都被改变了;当 exports = obj
时,obj
在内存中指向了一个新的地址,exports
作为 obj
的引用,也指向了这个新地址,所以 exports.name
和 module.exports.name
值不相等了。
ES6 中导入导出:export / export default / import
ES6
语法导入导出还是十分灵活的,我们项目里也使用 ES6
写法,可以记住以下几点帮助你理解:
export / export default
可以导出常量,对象,模块,函数等;export
可以导出多个变量,export default
只能导出一个变量;export
导出的内容,需要import {}
导入;export default
导出的内容,直接import
xxx 即可;export
能导出变量表达式,export default
不可以;
1 | // demo 1 |