# 代码分割和动态js
# 代码分割的意义
- 对于大的 Web 应用来说,将所有的代码都放到一个文件中,显然是不行的,特别是当有些代码在某个模块用不到或者有特殊情况才能用到的, webpack 有一个功能就是将代码分割成 chunks(语块),当代码执行到需要加载时才加载。
 - 例如:
- 抽离相同代码到一个共享模块
 - 脚本懒加载,使初始下载的代码更小 (如:首屏懒加载)
 
 
# 懒加载 JS 脚本的方式
- CommonJS: require.ensure
 - ES6: 动态 import (不支持原生,需要 babel 转换)
 
# 使用动态import
- 安装 bebal 插件
 
npm i @babel/plugin-syntax-dynamic-import -D
 1
- 修改 .babelrc 文件
 
{
  "plugins": ["@babel/plugin-syntax-dynamic-import"]
}
 1
2
3
2
3
- 使用
 - 例如通过click 事件去触发
 
// 声明一个组件
<Text/>
class Index extends React.Component {
  constructor() {
    this.state = {
      Text: null
    }
  }
  // 点击才会加载Test组件
  onLoadComponent() {
    import('./Test.js').then((Text) => {
      this.setState({
        Text: Text.default
      })
    })
  }
  render() {
    const { Text } = this.state
    return <div onClick="onLoadComponent">
      <span>react</span>
      { Text && <Text/> }
    </div>
  }
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
在 webpack 中是通过 JSONP 的方式将 Test 脚本加载进来