最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Webpack提升Vue.js應(yīng)用程序的4種方法(翻譯)

 更新時間:2019年10月09日 09:28:27   作者:KenNaNa  
這篇文章主要介紹了使用Webpack提升Vue.js應(yīng)用程序的4種方法(翻譯),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文翻譯自,翻譯技巧不太好,不喜勿碰 :
4 Ways To Boost Your Vue.js App With Webpack

眾所周知,webpack 是 開發(fā) vue.js 單頁面應(yīng)用程序的必備工具,通過管理復雜的構(gòu)建步驟,它可以使您的開發(fā)工作流程更加簡單,并且可以優(yōu)化應(yīng)用程序的大小和性能。

在本文中,我將解釋Webpack增強Vue應(yīng)用程序的四種方法,包括:

  • Single file components 單文件組件
  • Optimising the Vue build
  • Browser cache management
  • Code splitting

關(guān)于 vue-cli

如果您使用模板從vue-cli構(gòu)建應(yīng)用程序,那么將提供預制的Webpack配置。它們已經(jīng)過優(yōu)化,沒有任何改進建議!
但是,由于它們開箱即用的效果非常好,您可能對它們的實際功能并不太了解,對嗎?
考慮一下本文,對vue-cli模板中使用的Webpack配置進行概述,因為它們包含了我在這里討論的相同優(yōu)化。

1. Single file components

Vue的特有功能之一是將HTML用于組件模板。但是,這些帶有一個固有的問題:要么您的HTML標記需要使用笨拙的JavaScript字符串,要么您的模板和組件定義必須位于單獨的文件中,從而使其難以使用。

Vue有一個優(yōu)雅的解決方案,稱為“單個文件組件(SFC)”,該文件將模板,組件定義和CSS都包含在一個簡單的.vue文件中:

<template>
 <div id="my-component">...</div>
</template>
<script>
 export default {...}
</script>
<style>
 #my-component {...}
</style>

vue-loader Webpack插件使SFC成為可能。該加載器拆分SFC語言塊并將每個管道通過管道傳輸?shù)竭m當?shù)募虞d器,例如腳本塊轉(zhuǎn)到babel-loader,而模板塊轉(zhuǎn)到Vue自己的vue-template-loader,后者將模板轉(zhuǎn)換為JavaScript渲染函數(shù)。
vue-loader的最終輸出是一個JavaScript模塊,準備將其包含在Webpack捆綁包中。

vue-loader的典型配置如下:

module: {
 rules: [
  {
   test: /\.vue$/,
   loader: 'vue-loader',
   options: {
    loaders: {
     // Override the default loaders
    }
   }
  },
 ]
}

2. Optimising the Vue build

如果僅在Vue應(yīng)用程序*中使用渲染功能,而沒有HTML模板,則不需要Vue的模板編譯器。您可以通過從Webpack構(gòu)建中省略編譯器來減小捆綁包的大小。

請記住,單個文件組件模板已在開發(fā)中預編譯以呈現(xiàn)功能!

Vue.js庫只有運行時版本,其中包含Vue.js的所有功能,但模板編譯器稱為vue.runtime.js。它比完整版本小20KB,因此如果可以的話值得使用。

默認情況下,僅使用運行時構(gòu)建,因此,每次使用 import vue from 'vue' 時,都將使用它。在您的項目中,這就是您所得到的。但是,您可以使用alias 別名配置選項更改為其他版本:

resolve: {
 alias: {
  'vue$': 'vue/dist/vue.esm.js' // Use the full build
 }
},

Stripping out warnings and error messages in production

減小Vue.js構(gòu)建大小的另一種方法是刪除生產(chǎn)中的任何錯誤消息和警告。這些使用不必要的代碼使輸出包大小膨脹,并且還導致您最好避免運行時開銷

如果您檢查Vue源代碼,則會看到警告塊取決于環(huán)境變量process.env.NODE_ENV的值,例如:

if (process.env.NODE_ENV !== 'production') {
 warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
}

如果將process.env.NODE_ENV設(shè)置為生產(chǎn),那么在構(gòu)建過程中,minifier可以自動將此類警告塊從代碼中剝離。

您可以使用DefinePlugin來設(shè)置process.env.NODE_ENV的值,并使用UglifyJsPlugin來減少代碼并去除未使用的塊:

if (process.env.NODE_ENV === 'production') {
 module.exports.plugins = (module.exports.plugins || []).concat([
  new webpack.DefinePlugin({
   'process.env': {
    NODE_ENV: '"production"'
   }
  }),
  new webpack.optimize.UglifyJsPlugin()
 ])
}

3. Browser cache management

用戶的瀏覽器將緩存您網(wǎng)站的文件,以便僅在該瀏覽器尚無本地副本或本地副本已過期時才下載。

如果您所有的代碼都在一個文件中,那么進行微小的更改就意味著需要重新下載整個文件。

理想情況下,您希望用戶下載得盡可能少,因此將應(yīng)用程序很少更改的代碼與頻繁更改的代碼分開是明智的。

Vendor file

Common Chunks插件可以將您的 vendor 代碼(例如,不太可能經(jīng)常更改的Vue.js庫之類的依賴項)與您的應(yīng)用程序代碼(每次部署可能更改的代碼)分離。

您可以配置插件以檢查依賴項是否來自node_modules文件夾,如果是,則將其輸出到單獨的文件vendor.js中:

new webpack.optimize.CommonsChunkPlugin({
 name: 'vendor',
 minChunks: function (module) {
  return module.context && module.context.indexOf('node_modules') !== -1;
 }
})

如果這樣做,您現(xiàn)在在構(gòu)建輸出中將有兩個單獨的文件,這些文件將由瀏覽器獨立緩存:

<script src="vendor.js" charset="utf-8"></script>
<script src="app.js" charset="utf-8"></script>

Fingerprinting

當構(gòu)建文件更改時,我們?nèi)绾纹茐臑g覽器的緩存?

默認情況下,僅當緩存的文件到期時,或者當用戶手動清除緩存時,瀏覽器才會再次從服務(wù)器請求文件。

如果服務(wù)器指示文件已更改,則將重新下載該文件(否則服務(wù)器返回HTTP 304 Not Modified)。

為了節(jié)省不必要的服務(wù)器請求,我們可以在每次文件內(nèi)容更改時更改其名稱,以強制瀏覽器重新下載該文件。一個簡單的系統(tǒng)可以通過在文件名后附加一個哈希來為文件名添加“指紋”:


Common Chunks插件會發(fā)出“ chunkhash”,如果文件內(nèi)容已更改,則將對其進行更新。 Webpack可以在輸出文件名時將此哈希附加到文件名中:

output: {
 filename: '[name].[chunkhash].js'
},

執(zhí)行此操作時,您將看到輸出的文件將具有類似app.3b80b7c17398c31e4705.js的名稱。

Auto inject build files

當然,如果添加哈希,則必須更新索引文件中對該文件的引用,否則瀏覽器將不知道該哈希:

<script src="app.3b80b7c17398c31e4705.js"></script>

手動完成這項工作非常繁瑣,因此請使用HTML Webpack插件為您完成。該插件可以在捆綁過程中自動將對構(gòu)建文件的引用注入到HTML文件中。

首先刪除對構(gòu)建文件的引用:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>test-6</title>
 </head>
 <body>
  <div id="app"></div>
  <!-- built files should go here, but will be auto injected -->
 </body>
</html>

并將HTML Webpack插件添加到您的Webpack配置中:

new HtmlWebpackPlugin({
 filename: 'index.html'
 template: 'index.html',
 inject: true,
 chunksSortMode: 'dependency'
}),

現(xiàn)在,帶有哈希的構(gòu)建文件將自動添加到索引文件中。另外,您的index.html文件現(xiàn)在將包含在捆綁輸出中,因此您可能需要告訴Web服務(wù)器其位置已更改

4. Code splitting

默認情況下,Webpack會將所有應(yīng)用程序代碼輸出到一個大捆綁包中。但是,如果您的應(yīng)用有多個頁面,則拆分代碼會更有效,因此每個單獨的頁面代碼都位于單獨的文件中,并且僅在需要時才加載
Webpack具有一項稱為“代碼拆分”的功能。在Vue.js中實現(xiàn)此功能還需要異步組件,并且通過Vue Router變得更加容易。

Async components

異步組件沒有將定義對象作為第二個參數(shù),而是具有一個Promise函數(shù)來解析該定義對象,例如:

Vue.component('async-component', function (resolve, reject) {
 setTimeout(() => {
  resolve({
   // Component definition including props, methods etc.
  });
 }, 1000)
})

Vue僅在組件實際需要渲染時才調(diào)用該函數(shù)。它還會緩存結(jié)果以供將來重新渲染。
如果我們設(shè)計應(yīng)用程序,使每個“頁面”都是一個組件,并且將定義存儲在服務(wù)器上,那么我們就完成了代碼拆分的一半。

require

要從服務(wù)器加載異步組件的代碼,請使用Webpack require語法
這將指示W(wǎng)ebpack在構(gòu)建時將async-component捆綁在一個單獨的bundle中,更好的是,Webpack將使用AJAX處理此bundle的加載,因此您的代碼可以像這樣簡單:

Vue.component('async-component', function (resolve) {
 require(['./AsyncComponent.vue'], resolve)
});

Lazy loading

在Vue.js應(yīng)用程序中,vue-router通常是您用于將SPA組織到多個頁面中的模塊。延遲加載是使用Vue和Webpack實現(xiàn)代碼拆分的一種形式化方法。

const HomePage = resolve => require(['./HomePage.vue'], resolve);const rounter = new VueRouter({ routes: [  {   path: '/',   name: 'HomePage',   component: HomePage  } ]})

翻譯到此為止了,以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue表單數(shù)據(jù)交互提交演示教程

    vue表單數(shù)據(jù)交互提交演示教程

    今天小編就為大家分享一篇vue表單數(shù)據(jù)交互提交演示教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解Vue3如何優(yōu)雅的加載大量圖片

    詳解Vue3如何優(yōu)雅的加載大量圖片

    最近開發(fā)了一個功能,頁面首頁會加載大量的圖片,初次進入頁面時,會導致頁面性能下降,于是乎,我改進了這個功能,可以讓所有圖片自動懶加載,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-09-09
  • Vue二次封裝axios為插件使用詳解

    Vue二次封裝axios為插件使用詳解

    這篇文章主要介紹了Vue二次封裝axios為插件使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vue使用gitshot生成gif問題

    vue使用gitshot生成gif問題

    這篇文章主要介紹了vue使用gitshot生成gif問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue關(guān)于eslint空格縮進等的報錯問題及解決

    vue關(guān)于eslint空格縮進等的報錯問題及解決

    這篇文章主要介紹了vue關(guān)于eslint空格縮進等的報錯問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue3實現(xiàn)鼠標右鍵顯示菜單,點擊其他地方消失問題

    vue3實現(xiàn)鼠標右鍵顯示菜單,點擊其他地方消失問題

    這篇文章主要介紹了vue3實現(xiàn)鼠標右鍵顯示菜單,點擊其他地方消失問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 利用Vue Router實現(xiàn)單頁面應(yīng)用(SPA)的代碼示例

    利用Vue Router實現(xiàn)單頁面應(yīng)用(SPA)的代碼示例

    在當今前端開發(fā)中,單頁面應(yīng)用(SPA)已成為一種主流的開發(fā)模式,它通過在用戶與網(wǎng)頁之間提供更流暢的交互體驗,來改變傳統(tǒng)多頁面應(yīng)用的思維,本文將詳細介紹如何利用 Vue.js 中的 Vue Router 來實現(xiàn)一個簡單的單頁面應(yīng)用,需要的朋友可以參考下
    2025-01-01
  • 深度解析?Vue3?的響應(yīng)式機制

    深度解析?Vue3?的響應(yīng)式機制

    這篇文章主要介紹了深度解析?Vue3?的響應(yīng)式機制,今天就帶大家深入了解一下 Vue 3 的響應(yīng)式機制,相信學完今天的內(nèi)容,會對響應(yīng)式機制有更深地體會;文章會結(jié)合代碼示例,幫大家掌握響應(yīng)式機制的進階用法,讓我們正式開始學習吧
    2022-09-09
  • Vue頁面渲染中key的應(yīng)用實例教程

    Vue頁面渲染中key的應(yīng)用實例教程

    這篇文章主要給大家介紹了關(guān)于Vue頁面渲染中key的應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Vuex之module使用方法及場景說明

    Vuex之module使用方法及場景說明

    這篇文章主要介紹了Vuex之module使用方法及場景說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

察哈| 通化县| 宕昌县| 正定县| 时尚| 张家界市| 理塘县| 南通市| 西昌市| 桦川县| 德庆县| 囊谦县| 新密市| 汉中市| 上高县| 龙口市| 夹江县| 米易县| 名山县| 乐安县| 当涂县| 昌平区| 赤峰市| 盐池县| 若尔盖县| 白玉县| 衡阳县| 永安市| 介休市| 石柱| 司法| 阿拉善左旗| 镇沅| 田林县| 和林格尔县| 兴城市| 辰溪县| 曲阳县| 洪湖市| 丰都县| 东丰县|