使用 webpack 的配置中 mode: ‘production’

好处

  • 自动开启代码压缩
  • Vue React 等会自动删掉调试代码(如开发环境的waring)
  • 启动 Tree-Shaking
    • 必须是ES6 Module 才能让 tree-shaking 生效
    • commonjs 不行

ES6 Module 和 Commonjs 区别

  • ES6 Module 静态引入,编译时引入
  • Commonjs 动态引入,执行时引入
  • 只有ES6 Module才能静态分析,实现Tree-Shaking
    1. // Commonjs
    2. let apiList = require('../config/api.js')
    3. if (isDev) {
    4. // 可以动态引入,执行时引入
    5. apiList = require('../config/api_dev.js')
    6. }
    1. // ES6 Module
    2. import apiList from '../config/api.js'
    3. if (isDev) {
    4. // 编译时报错,只能静态引入
    5. import apiList from '../config/api_dev.js'
    6. }

Scope Hosting

举例

  1. // hello.js
  2. export default 'Hello'
  1. // main.js
  2. import str from './hello.js'
  3. console.log(str)

默认打包结果
截屏2020-10-26 下午5.13.16.png
源码中2个文件,打包出来是2个函数,假如有很多文件,就可能有很多函数,函数越多作用域越多,对js执行和内存消耗等都不友好
截屏2020-10-26 下午5.30.16.png

  • 代码体积更小
  • 创建函数作用域更少
  • 代码可读性更好

截屏2020-10-26 下午5.33.19.png