在以前的 javascript 中一直是没有模块系统的,前辈们为了解决这些问题,提出了各类规范, 最主要的有CommonJS和AMD两种。前者用于服务器,后者用于浏览器。而 ES6 中提供了简单的模块系统,彻底能够取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。javascript
es6 中新增了两个命令 export
和 import
, export
命令用于规定模块的对外接口,import
命令用于输入其余模块提供的功能。java
一个模块就是一个独立的文件。该文件内部的全部变量,外部没法获取。若是你但愿外部可以读取模块内部的某个 变量,就必须使用export关键字输出该变量。下面是一个JS文件,里面使用export命令输出变量。node
1 |
// math.js |
使用export命令定义了模块的对外接口之后,其余JS文件就能够经过import命令加载这个模块(文件)。es6
1 |
// main.js |
上面介绍了模块化最基础的用法,export 不止能够导出函数,还能够导出对象,类,字符串等等npm
1 |
export const obj = { |
export的写法,除了像上面这样,还有另一种。json
1 |
let a = 1 |
上面代码在export命令后面,使用大括号指定所要输出的一组变量。它与前一种写法是等价的,可是应该优先考虑使用这种写法。由于这样就能够在脚本尾部,一眼看清楚输出了哪些变量。浏览器
经过 as 改变输出名称服务器
1 |
// test.js |
1 |
import { test, b, c} from './test.js' // 改变命名后只能写 as 后的命名 |
上面啊的写法中,import
中须要指定加载的变量名或函数名,不然没法加载。可是,用户确定但愿快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法。babel
export default
指定默认输出, import 无需知道变量名就能够直接使用模块化
1 |
// test.js |
1 |
import say from './test.js' // 这里能够指定任意变量名 |
有了export default命令,加载模块时就很是直观了,以一些经常使用的模块为例
1 |
import $ from 'jQuery' // 加载jQuery 库 |
import
为加载模块的命令,基础使用方式和以前同样
1 |
// main.js |
1 |
import {add as sum, subtract} from './test' |
除了指定输出变量名或者 export.default
定义的导入, 还能够经过 *
号加载模块的所有.
1 |
// math.js |
1 |
import * as math from './test.js' |
上面介绍了,es6 中模块的使用方式,可是如今es6的模块化,不管在浏览器端仍是 node.js 上都没有获得很好的支持,因此须要,一些转码的工具。使咱们能够用es6的方式来编码,最后输出es5的代码。
这里推荐一款基于 es6 模块化方式的打包神器 rollup,它使用 Tree-shaking
的技术打包,基本能够作到零冗余的代码,并且配置简单,打包速度也够快。
首先在 package.json
中加上 rollup
打包依赖的包
1 |
{ |
下面是个人打包程序
1 |
// build.js |
package.json
中加上执行脚本 1 |
{ |
而后,执行命令
1 |
npm run build |
ok 到这里打包就都结束了。