model.export和export default使用

区别

JavaScript 现在有两种模块。一种是 ES6 模块,简称 ESM;另一种是 CommonJS 模块,简称 CJS。
CommonJS 模块是 Node.js 专用的,与 ES6 模块不兼容
语法上面,两者最明显的差异是:
  • CommonJS 模块使用require()和module.exports,ES6 模块使用import和export
  • 它们采用不同的加载方案。从 Node.js v13.2 版本开始,Node.js 已经默认打开了 ES6 模块支持。
  • Node.js 要求 ES6 模块采用.mjs后缀文件名。也就是说,只要脚本文件里面使用import或者export命令,那么就必须采用.mjs后缀名。Node.js 遇到.mjs文件,就认为它是 ES6 模块

总结:

  1. module.exports用于node模块开发,导出某个模块,对应导入require(‘xxx模块’)
  2. export default用于ES6中模块开发,导出某个模块,对应导入import XXX from 'xxx模块'

 

 

明确

module.exports与exports ,是CommonJS的规范,被使用于Node.js中。export与export default ,是ES6规范,被使用于React或Vue中。


注意:在node中使用原生的es语法进行导入导出,是作为实验功能,不建议大家在正式的工程项目中使用

解析

Node使用CommonJS规范:

  定义每个模块的内部,module变量代表当前模块,exports是module的属性,表示对外的接口。加载某个模块,实际上是加载该模块的module.exports属性。
  Node为每隔模块提供了一个exports变量,指向module.exports,这等同于每个模块头部有这样的一行代码:

1 var exports = module.exports

 

ES6使用export和import来导出/导入模块。

1 export与export default均可用于导出常量/函数/文件/模块等;
2 在一个文件或模块中,export/import可以有多个,export default只有一个;
3 通过export方式导出,在导入时需要加{},export default不需要;
4 export能导出变量/表达式,export default不可以。
5 CommonJS模块输出是一个值的拷贝,ES6模块输出是值的引用。
6 CommonJS模块是运行时加载,ES6模块是编译时输出接口。
7 CommonJS模块无论require多少次,都只会在第一次加载时运行一次,然后保存到缓存中,下次在require,只会去从缓存取。

posted @ 2022-04-21 09:23  小忱  阅读(885)  评论(0)    收藏  举报