前两者export、export default可为一组,是es6的规范,和import匹配,import是es6中的语法标准;
后两者module.exports、exports可为一组,是commonjs的规范,和require匹配,require是amd规范下的引入方式。
当组合不适配时,当然就会报错了。
module.exports、exports
1,从使用方式来看,exports是module的一个属性
2,exports默认指向module.exports对象的引用,不能单独给exports赋值,否则无用(改变了exports的指向),引入方什么也拿不到;可给module.exports赋值,或通过module.exports.xx来挂载新属性xx等。
3,不论是module.exports还是exports,向外共享的最终结果是module.exports所指的对象,这两个没什么区别。
4,基于require引入module.exports、exports导出的成员时,括号里的文件不需要带.js,带上也能运行成功。
export、export default
1,export和export default都可以用于导出常量,函数,模块,文件等,export default是把此命令后面的变量赋值给default这个特殊的系统变量,并把它导出到其余模块中使用,仅导出模块中一个成员时可使用。
2,以export方式导出时,导入时要加{};以export default导出时,导入时不需要{}
3,export可有多个,export default只能有一个,多个export default会提示TS2528: A module cannot have multiple default exports.
4,用export default导出时的名称可以与引入时的名称不同,但export导出必须和import时名称一致;
5,基于import引入export、export default导出的成员时,from后的文件需要带.js后缀。