Web/09-Node.js/02-JavaScript模块化04:ES6.md
2018-04-14 13:48:35 +08:00

158 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ES6模块化的基本语法
### ES6模块化的说明
**依赖模块需要编译打包处理。**原因如下:
- 1有些浏览器不支持 ES6 的语法,写完 ES6 的代码后,需要通过`Babel`将 ES6 转化为 ES5。
- 2生成了ES5之后里面仍然有`require`语法,而浏览器并不认识`require`这个关键字。此时,可以用 `Browserify`编译打包 js进行再次转换。
推荐学习链接:
- <http://es6.ruanyifeng.com/#docs/module>
### 基本语法:
**导出模块**
```
export
```
**引入模块**
```
import xxx from '路径'
```
## ES6模块化的使用举例
### 1、初始化项目
1在工程文件中新建如下目录
```
js
| src
| module1.js
| module2.js
| module3.js
| main.js
index.html
```
2在工程的根目录下新建文件`package.json`,内容如下:
```json
{
"name": "es6-babel-browserify",
"version": "1.0.0"
}
```
### 2、环境配置安装babel 和 browserify等
1安装babel 和 browserify
```bash
npm install babel-cli -g
npm install babel-preset-es2015 --save-dev
npm install browserify -g
```
安装 babel 的详细解释,可以参考本人的另外一篇文章:[ES6的介绍和环境配置](https://github.com/smyhvae/Web/blob/master/10-ES6/03-ES6%E7%9A%84%E4%BB%8B%E7%BB%8D%E5%92%8C%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.md)
2新建.babelrc
在根目录下新建文件`.babelrc`,输入如下内容:
```
{
"presets":[
"es2015"
],
"plugins":[]
}
```
### 3、编写代码
1module1.js
```java
//暴露模块:采用分别暴露的方式
export function foo1() {
console.log('我是 module1 中的 foo1');
}
export function foo2() {
console.log('我是 module2 中的 foo2');
}
export let arr = [1, 2, 3, 4, 5];
```
4main.js
ES6的 import 语法中,在引入时,要求用**对象解构赋值**的形式。而不是用 `import myModule from ...`这种形式。【重要】
### 4、编译转换
如果我们不进行转换,而是直接在 index.html 中加载 js/src/main.js是会报错的
接下来,我们就进行转换。
1利用 babel 将 ES6 转换为 ES5
```
babel src -d build //build目录会自动生成
```
上方命令的意思是,将`src`目录下的所有ES6文件转化为ES5文件并放在`build`目录下(`build`目录会被自动创建)。
转化成ES5之后我们发现如果直接在 index.html 中加载`build`目录下的ES5文件也是会报错的因为浏览器不认识`main.js`里的`require`关键字:
于是,我们还要进行一次转换。
2利用`Browserify`编译打包 `build`目录下的 ES5 文件:
```bash
browserify build/main.js -o dist/main.js //dist目录需要手动创建
```
dist/main.js就是我们需要引入到 index.html 里的文件。
以后我们每次修改完ES6的代码就要执行上面的两个命令重新生成新的js文件。