都是es6的语法,都属于导出,
- export default 是默认导出,只能导出一个模块对象,一个模块中只能使用一次,import引入时直接引入默认导出的变量名即可
- export是导出,一个模块中可以使用多次,用于导出模块中的变量,对象,函数,类。
对应的导入关键字是import,对应引入导出的变量需要是按需引入,export对应的import必须加上{}
// test.js
export default const a = 1;对应的import分别是import a from 'test'
export const a = 1;对应的import分别是import {a} from 'test'
// export default对应的取别名方式
import b from 'test'
// export对应的取别名方式
import {a as b} from 'test'
- 下面这两种模块导入的方法是es5的方法
module exports ={}
exports = {}
exports其实是module.exports的引用,在nodejs中,每一个js文件都被看成是一个模块,所以,nodejs会为每一个js文件生成一个module对象,这个module对象会有一个exports属性,并且这个exports属性是一个空对象
对应的是require引入
知识点补充:
CommonJS的模块化规范是es5版本的 对应的是module exports和require的导出和引入的方法
我们对 CommonJS 的规范已经非常熟悉了,require
命令的基本功能是,读入并执行一个 js 文件,然后返回该模块的 exports 对象,这在服务端是可行的,因为服务端加载并执行一个文件的时间消费是可以忽略的,模块的加载是运行时同步加载的,require
命令执行完后,文件就执行完了,并且成功拿到了模块导出的值。
这种规范天生就不适用于浏览器,因为它是同步的。可想而知,浏览器端每加载一个文件,要发网络请求去取,如果网速慢,就非常耗时,浏览器就要一直等 require
返回,就会一直卡在那里,阻塞后面代码的执行,从而阻塞页面渲染,使得页面出现假死状态。
为了解决这个问题,后面发展起来了众多的前端模块化规范,包括 CommonJS 大致有如下几种:
从 ES6 开始,在语言标准的层面上,实现了模块化功能,而且实现得相当简单,完全可以取代 CommonJS 和 CMD、AMD 规范,成为浏览器和服务器通用的模块解决方案。
早在2013年5月,Node.js 的包管理器 NPM 的作者 Isaac Z. Schlueter 说过 CommonJS 已经过时,Node.js 的内核开发者已经决定废弃该规范。原因主要有两个,一个是因为 Node.js 本身也不是完全采用 CommonJS 的规范,譬如在CommonJS 之 exports 中的提到 exports
属性就是 Node.js 自己加的,Node.js 当时是决定不再跟随 CommonJS 的发展而发展了。二来就是 Node.js 也在逐步用 ES6 Module 替代 CommonJS
任何模块化,都必须考虑的两个问题就是导入依赖和导出接口。ES6 Module 也是如此,模块功能主要由两个命令构成:export
和 import
。export
命令用于导出模块的对外接口,import
命令用于导入其他模块导出的内容。