看一次忘一次,记一次乱一次的exports、module.exports、export和export.default。
require:node和es6都支持的引入;
export/import:仅es6支持的导出引入;
module.exports/exports:仅node支持的导出。
exports和module.exports:
在一个node执行一个文件时,会给这个文件内生成一个 exports和module对象,
而module又有一个exports属性。他们之间的关系都指向一块{}内存区域。
exports = module.exports = {};
可以看出,require导出的内容是module.exports的指向的内存块内容,并不是exports的。即exports其实是module.exports对象的一个引用。为了避免糊涂,尽量都用 module.exports 导出,然后用require导入。(用内存块概念理解)
export 和 export default区别:
1、export与export default均可用于导出常量、函数、文件、模块等
2、在一个文件或模块中,export、import可以有多个,export default仅有一个
3、通过export方式导出,在导入时要加{ },export default则不需要
4、export能直接导出变量表达式,export default不行。
使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名。
本质上,a.js文件的exportdefault输出一个叫做default的变量,然后系统允许你为它取任意名字。所以可以为import的模块起任何变量名,且不需要用大括号包含。