• 开启生产环境模式
    • 不使用构建工具
    • 使用构建工具
      • webpack
      • Browserify
      • Rollup

    开启生产环境模式

    开发环境下,Vue 会提供很多警告来帮你对付常见的错误与陷阱。而在生产环境下,这些警告语句却没有用,反而会增加应用的体积。此外,有些警告检查还有一些小的运行时开销,这在生产环境模式下是可以避免的。

    不使用构建工具

    如果用 Vue 完整独立版本,即直接用 <script> 元素引入 Vue 而不提前进行构建,请记得在生产环境下使用压缩后的版本 (vue.min.js)。两种版本都可以在安装指导中找到。

    使用构建工具

    当使用 webpack 或 Browserify 类似的构建工具时,Vue 源码会根据 process.env.NODE_ENV 决定是否启用生产环境模式,默认情况为开发环境模式。在 webpack 与 Browserify 中都有方法来覆盖此变量,以启用 Vue 的生产环境模式,同时在构建过程中警告语句也会被压缩工具去除。所有这些在 vue-cli 模板中都预先配置好了,但了解一下怎样配置会更好。

    webpack

    在 webpack 4+ 中,你可以使用 mode 选项:

    1. module.exports = {
    2. mode: 'production'
    3. }

    但是在 webpack 3 及其更低版本中,你需要使用 DefinePlugin:

    1. var webpack = require('webpack')
    2. module.exports = {
    3. // ...
    4. plugins: [
    5. // ...
    6. new webpack.DefinePlugin({
    7. 'process.env.NODE_ENV': JSON.stringify('production')
    8. })
    9. ]
    10. }

    Browserify

    • 在运行打包命令时将 NODE_ENV 设置为 "production"。这等于告诉 vueify 避免引入热重载和开发相关的代码。
    • 对打包后的文件进行一次全局的 envify 转换。这使得压缩工具能清除掉 Vue 源码中所有用环境变量条件包裹起来的警告语句。例如:
    1. NODE_ENV=production browserify -g envify -e main.js | uglifyjs -c -m > build.js
    • 或者在 Gulp 中使用 envify:
    1. // 使用 envify 的自定义模块来定制环境变量
    2. var envify = require('envify/custom')
    3. browserify(browserifyOptions)
    4. .transform(vueify)
    5. .transform(
    6. // 必填项,以处理 node_modules 里的文件
    7. { global: true },
    8. envify({ NODE_ENV: 'production' })
    9. )
    10. .bundle()
    • 或者配合 Grunt 和 grunt-browserify 使用 envify:
    1. // 使用 envify 自定义模块指定环境变量
    2. var envify = require('envify/custom')
    3. browserify: {
    4. dist: {
    5. options: {
    6. // 该函数用来调整 grunt-browserify 的默认指令
    7. configure: b => b
    8. .transform('vueify')
    9. .transform(
    10. // 用来处理 `node_modules` 文件
    11. { global: true },
    12. envify({ NODE_ENV: 'production' })
    13. )
    14. .bundle()
    15. }
    16. }
    17. }

    Rollup

    使用 rollup-plugin-replace:

    1. const replace = require('rollup-plugin-replace')
    2. rollup({
    3. // ...
    4. plugins: [
    5. replace({
    6. 'process.env.NODE_ENV': JSON.stringify( 'production' )
    7. })
    8. ]
    9. }).then(...)