亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Vue.js基礎(chǔ)教程(官方手冊(cè)) / 生產(chǎn)環(huán)境部署

生產(chǎn)環(huán)境部署

生產(chǎn)環(huán)境部署


以下大多數(shù)內(nèi)容在你使用 Vue CLI 時(shí)都是默認(rèn)開啟的。該章節(jié)僅跟你自定義的構(gòu)建設(shè)置有關(guān)。


目錄


開啟生產(chǎn)環(huán)境模式


開發(fā)環(huán)境下,Vue 會(huì)提供很多警告來(lái)幫你對(duì)付常見的錯(cuò)誤與陷阱。而在生產(chǎn)環(huán)境下,這些警告語(yǔ)句卻沒有用,反而會(huì)增加應(yīng)用的體積。此外,有些警告檢查還有一些小的運(yùn)行時(shí)開銷,這在生產(chǎn)環(huán)境模式下是可以避免的。


不使用構(gòu)建工具

如果用 Vue 完整獨(dú)立版本,即直接用 <script> 元素引入 Vue 而不提前進(jìn)行構(gòu)建,請(qǐng)記得在生產(chǎn)環(huán)境下使用壓縮后的版本 (vue.min.js)。兩種版本都可以在安裝指導(dǎo)中找到。


使用構(gòu)建工具

當(dāng)使用 webpack 或 Browserify 類似的構(gòu)建工具時(shí),Vue 源碼會(huì)根據(jù) process.env.NODE_ENV 決定是否啟用生產(chǎn)環(huán)境模式,默認(rèn)情況為開發(fā)環(huán)境模式。在 webpack 與 Browserify 中都有方法來(lái)覆蓋此變量,以啟用 Vue 的生產(chǎn)環(huán)境模式,同時(shí)在構(gòu)建過程中警告語(yǔ)句也會(huì)被壓縮工具去除。所有這些在 vue-cli 模板中都預(yù)先配置好了,但了解一下怎樣配置會(huì)更好。

webpack

在 webpack 4+ 中,你可以使用 mode 選項(xiàng):

module.exports = {
  mode: 'production'
}

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

var webpack = require('webpack')

module.exports = {
  // ...
  plugins: [
    // ...
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ]
}

Browserify

  • 在運(yùn)行打包命令時(shí)將 NODE_ENV 設(shè)置為 "production"。這等于告訴 vueify 避免引入熱重載和開發(fā)相關(guān)的代碼。

  • 對(duì)打包后的文件進(jìn)行一次全局的 envify 轉(zhuǎn)換。這使得壓縮工具能清除掉 Vue 源碼中所有用環(huán)境變量條件包裹起來(lái)的警告語(yǔ)句。例如:

NODE_ENV=production browserify -g envify -e main.js | uglifyjs -c -m > build.js
  • 或者在 Gulp 中使用 envify

// 使用 envify 的自定義模塊來(lái)定制環(huán)境變量var envify = require('envify/custom')

browserify(browserifyOptions)
  .transform(vueify)
  .transform(    // 必填項(xiàng),以處理 node_modules 里的文件
    { global: true },
    envify({ NODE_ENV: 'production' })
  )
  .bundle()
// 使用 envify 自定義模塊指定環(huán)境變量var envify = require('envify/custom')

browserify: {  dist: {    options: {
        // 該函數(shù)用來(lái)調(diào)整 grunt-browserify 的默認(rèn)指令
        configure: b => b
        .transform('vueify')
        .transform(
            // 用來(lái)處理 `node_modules` 文件
          { global: true },
          envify({ NODE_ENV: 'production' })
        )
        .bundle()
    }
  }
}

Rollup

使用 rollup-plugin-replace

const replace = require('rollup-plugin-replace')
rollup({  // ...
  plugins: [
    replace({      'process.env.NODE_ENV': JSON.stringify( 'production' )
    })
  ]
}).then(...)


模板預(yù)編譯


當(dāng)使用 DOM 內(nèi)模板或 JavaScript 內(nèi)的字符串模板時(shí),模板會(huì)在運(yùn)行時(shí)被編譯為渲染函數(shù)。通常情況下這個(gè)過程已經(jīng)足夠快了,但對(duì)性能敏感的應(yīng)用還是最好避免這種用法。

預(yù)編譯模板最簡(jiǎn)單的方式就是使用單文件組件——相關(guān)的構(gòu)建設(shè)置會(huì)自動(dòng)把預(yù)編譯處理好,所以構(gòu)建好的代碼已經(jīng)包含了編譯出來(lái)的渲染函數(shù)而不是原始的模板字符串。

如果你使用 webpack,并且喜歡分離 JavaScript 和模板文件,你可以使用 vue-template-loader,它也可以在構(gòu)建過程中把模板文件轉(zhuǎn)換成為 JavaScript 渲染函數(shù)。


提取組件的 CSS


當(dāng)使用單文件組件時(shí),組件內(nèi)的 CSS 會(huì)以 <style> 標(biāo)簽的方式通過 JavaScript 動(dòng)態(tài)注入。這有一些小小的運(yùn)行時(shí)開銷,如果你使用服務(wù)端渲染,這會(huì)導(dǎo)致一段“無(wú)樣式內(nèi)容閃爍 (fouc)”。將所有組件的 CSS 提取到同一個(gè)文件可以避免這個(gè)問題,也會(huì)讓 CSS 更好地進(jìn)行壓縮和緩存。

查閱這個(gè)構(gòu)建工具各自的文檔來(lái)了解更多:


跟蹤運(yùn)行時(shí)錯(cuò)誤


如果在組件渲染時(shí)出現(xiàn)運(yùn)行錯(cuò)誤,錯(cuò)誤將會(huì)被傳遞至全局 Vue.config.errorHandler 配置函數(shù) (如果已設(shè)置)。利用這個(gè)鉤子函數(shù)來(lái)配合錯(cuò)誤跟蹤服務(wù)是個(gè)不錯(cuò)的主意。比如 Sentry,它為 Vue 提供了官方集成。