欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webpack之基礎(chǔ)打包優(yōu)化的實(shí)現(xiàn)

 更新時(shí)間:2022年02月09日 15:12:08   作者:李知恩  
本文主要介紹了webpack之基礎(chǔ)打包優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>

前言

webpack至今已經(jīng)發(fā)展了5個(gè)版本,如果你還不會(huì)webpack,那么趕緊學(xué)習(xí)起來吧。webpack是web前端開發(fā)人員必學(xué)的一個(gè)知識(shí)點(diǎn)。本篇文章帶大家一起看看webpack基礎(chǔ)的打包優(yōu)化。話不多說,上酸菜~~~~

優(yōu)化loader

在腳手架項(xiàng)目中,想必各位開發(fā)人員都會(huì)用到預(yù)處理的css。比如sass、stylus、less這些預(yù)處理語(yǔ)言。我們知道使用這些預(yù)處理css必須要在webpack中配置相應(yīng)的loader。

當(dāng)我們配置過多的loader時(shí),各loader之間必定會(huì)轉(zhuǎn)換出大量的代碼,這些代碼會(huì)導(dǎo)致項(xiàng)目在啟動(dòng)和打包時(shí)變得非常慢,這個(gè)時(shí)候就需要我們?nèi)ミM(jìn)行loader的優(yōu)化了。在loader的相關(guān)的配置中,我們可以排除掉第三方包中的文件,減少loader代碼轉(zhuǎn)換的范圍。

module.exports = {
    module: {
        rules: [
            test: /\.css$/, 
            loader: ['style-loader', 'css-loader'],
            include: [resolve('src')],// 只在src文件夾下查找
            // 不去查找的文件夾路徑,node_modules下的代碼是編譯過得,沒必要再去處理一遍
            exclude: /node_modules/ 
        ]
    }
}

壓縮代碼

webpack中,我們可以使用UglifyjsWebpackPlugin這個(gè)插件來壓縮 js 和css的代碼,從而減小項(xiàng)目打包的體積,提升打包速率。

注意:在開發(fā)環(huán)境我們不需要使用這個(gè)插件~

//安裝插件
npm install uglifyjs-webpack-plugin --save-dev

//在 vue.config.js中
/** 引入uglifyjs-webpack-plugin */
const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); 
/** 全局變量,當(dāng)前環(huán)境 */ 
const env = process.env.NODE_ENV; 
module.exports = { 
... 
configureWebpack: config => {
  if (env === "production") {
    config.optimization.minimizer.push(
        new UglifyJsPlugin({
          //測(cè)試匹配壓縮的文件
          test: /.js(?.*)?$/i,
          //要被壓縮的文件
          include: //includes/,
          //是否開啟文件緩存
          cache: true,
          //是否開啟多進(jìn)程并行壓縮
          paralleL: true,
          // 使用uglifyOptions移除掉生產(chǎn)環(huán)境中的console
          uglifyOptions: {
            warnings: false,
            compress: {drop_console: true, drop_debugger: true, pure_funcs: ['console.log']}
          }
        }))
  }}}

uglifyjs-webpack-plugin這個(gè)插件還有很多的配置項(xiàng) 具體可以參考uglifyjs-webpack-plugin

注意開啟parallel多進(jìn)程壓縮對(duì)項(xiàng)目打包速度的提升很有幫助

gzip壓縮

除了壓縮 jscss,我們還可以壓縮webpack打包之后的文件。

開啟gzip壓縮后webpack生成的js文件的體積將縮小原來的30%以上。

要開啟gzip壓縮 我們也需要用到一個(gè)插件compression-webpack-plugin 并且我們還需要保證服務(wù)端和客戶端都支持gzip。

//安裝插件
npm install compression-webpack-plugin --save-dev

//在 vue.config.js中
/** 引入compression-webpack-plugin */
const CompressionWebpackPlugin = require('compression-webpack-plugin'); 
const productionGzipExtensions = /.(js|css|json|txt|html|icon|svg)(?.*)$/i
module.exports = { 
... 
configureWebpack: config => {
  if (env === "production") {
    config.plugins.push({
      new CompressionWebpackPlugin({
       filename: '[path].gz[query]',
       algorithm: 'gzip',
       test: productionGzipExtensions,
       threshold: 10240,
       minRatio: 0.8
  })
    })
  }}}

compression-webpack-plugin 這個(gè)插件同樣也有很多的配置項(xiàng),具體參考compression-webpack-plugin

抽離公共依賴包

對(duì)于一些體積較大,不長(zhǎng)更新的包,我們并不需要下載到項(xiàng)目中使用。我們可以選擇使用cdn的方式去進(jìn)行引入,當(dāng)然最好還是將這些庫(kù)放在自己的服務(wù)器下~ webpack允許我們?cè)谕獠恳胍恍┵Y源。

webpack的配置中有這樣一個(gè)配置項(xiàng) externals:

防止將某些 import 的包(package)打包bundle 中,而是在運(yùn)行時(shí)(runtime)再去從外部獲取這些擴(kuò)展依賴(external dependencies) 。

從外部加載擴(kuò)展的依賴而不是在項(xiàng)目中獲取。 顯然,這肯定能減少項(xiàng)目大小,縮小打包體積。

抽離公共依賴包我們也需要安裝一個(gè)插件html-webpack-plugin。使用這個(gè)插件主要是將外部引入的cdn放到index.html中加載。

如果你的webpack的版本大于4.0那么你無需安裝,webpack4.0已經(jīng)自帶了該插件。本項(xiàng)目中的webpack的版本是4.2.15的因此無需安裝

下面和我一起看看該如何進(jìn)行配置:

// 在 vue.config.js中
const baseUrl = 'https://minturechan.oss-cn-shenzheng.aliyuncs.com/npm'
const cdn = {
  js: [`${baseUrl}vue@2.6.11/dist/vue.min.js`,
    `${baseUrl}vue-router@3.2.0/dist/vue-router.min.js`,
    `${baseUrl}vuex@3.4.0/dist/vuex.min.js`,
    `${baseUrl}view-design@4.0.0/dist/iview.min.js`,
    `${baseUrl}jquery@3.4.1/dist/jquery.min.js`
  ],
  css: [`${baseUrl}view-design@4.0.0/dist/styles/iview.css`]
}
module.exports ={
chainWebpack: config => {
//config.plugin('html')這個(gè)表示獲取 html-webpack-plugin這個(gè)插件~
config.plugin('html').tap(args => {
  if (env === "production") {
    args[0].cdn = cdn
  }
  return args
})
 }
}

vue.config.js中配置完成后 我們還需要在public文件夾下的index.html中引入

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <link rel="icon" href="<%= BASE_URL %>zyd.ico" rel="external nofollow" >
    <title>test</title>
    <% for (var i in
    htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
    <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow"  rel="external nofollow"  rel="preload" as="style" />
    <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow"  rel="external nofollow"  rel="stylesheet" />
    <% } %>

    <% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js){
    %> <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script> <% } %>
  </head>
  <body>
    <div id="app">
    <!-- built files will be auto injected -->
    </div>
  </body>
</html>

index.html中加上如下代碼即可引入外部cdn資源~~

最后

webpack還有非常多可以優(yōu)化的地方,本文只是簡(jiǎn)單的說明了一些webpack基礎(chǔ)的打包優(yōu)化配置。

到此這篇關(guān)于webpack之基礎(chǔ)打包優(yōu)化的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)webpack 打包優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript模擬scroll滾動(dòng)效果腳本

    Javascript模擬scroll滾動(dòng)效果腳本

    項(xiàng)目需要寫了一段模擬Scroll滾動(dòng)代碼,分享的同時(shí),我有些疑問,希望大家能幫忙解決,代碼如下
    2008-09-09
  • js簡(jiǎn)單實(shí)現(xiàn)圖片延遲加載的方法

    js簡(jiǎn)單實(shí)現(xiàn)圖片延遲加載的方法

    這篇文章主要介紹了js簡(jiǎn)單實(shí)現(xiàn)圖片延遲加載的方法,涉及javascript針對(duì)頁(yè)面元素的遍歷與動(dòng)態(tài)設(shè)置技巧,需要的朋友可以參考下
    2016-07-07
  • javascript實(shí)現(xiàn)用戶點(diǎn)擊數(shù)量統(tǒng)計(jì)

    javascript實(shí)現(xiàn)用戶點(diǎn)擊數(shù)量統(tǒng)計(jì)

    本文主要javascript實(shí)現(xiàn)用戶點(diǎn)擊數(shù)量統(tǒng)計(jì)的方法進(jìn)行詳細(xì)介紹,具有很好的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • toString.call()通用的判斷數(shù)據(jù)類型方法示例

    toString.call()通用的判斷數(shù)據(jù)類型方法示例

    這篇文章主要給大家介紹了關(guān)于toString.call()通用的判斷數(shù)據(jù)類型方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Javascript 匿名函數(shù)及其代碼模式原理

    Javascript 匿名函數(shù)及其代碼模式原理

    很多同學(xué)知道怎么用這種匿名函數(shù),卻或許并不明白為什么這樣寫就能夠調(diào)用匿名函數(shù)。也許知道后面的圓括號(hào)是執(zhí)行前面的函數(shù),而并不清楚前面的圓括號(hào)具有何種含義!本文將帶你了解匿名函數(shù)的代碼模式原理。
    2010-03-03
  • javascript操作元素的常見方法小結(jié)

    javascript操作元素的常見方法小結(jié)

    這篇文章主要介紹了javascript操作元素的常見方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript針對(duì)頁(yè)面元素動(dòng)態(tài)獲取、賦值、動(dòng)態(tài)操作相關(guān)使用技巧,需要的朋友可以參考下
    2019-11-11
  • javascript中的prototype屬性使用說明(函數(shù)功能擴(kuò)展)

    javascript中的prototype屬性使用說明(函數(shù)功能擴(kuò)展)

    一說到prototype很多人可能第一個(gè)想到的是著名的prototype.js框架,當(dāng)然我們今天說的不是它,而是Javascript中的prototype屬性,一般都被翻譯為“原型”。
    2010-08-08
  • 比較常見的javascript中定義函數(shù)的區(qū)別

    比較常見的javascript中定義函數(shù)的區(qū)別

    js定義函數(shù)有好多種,但是他們之間的區(qū)別,大家都了解嗎,接下來,小編通過本文給大家介紹比較常見的js中定義函數(shù)的區(qū)別,對(duì)本文感興趣的朋友一起看看吧
    2015-11-11
  • uniapp分包(小程序分包)處理圖文詳解

    uniapp分包(小程序分包)處理圖文詳解

    小程序上傳的時(shí)候,主包不能超過2M,如果超出,則會(huì)上傳失敗,這時(shí)候就需要把界面進(jìn)行分包,下面這篇文章主要給大家介紹了關(guān)于uniapp分包(小程序分包)處理的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • javascript同步Import,同步調(diào)用外部js的方法

    javascript同步Import,同步調(diào)用外部js的方法

    javascript同步Import,同步調(diào)用外部js的實(shí)現(xiàn)代碼,測(cè)試確實(shí)可用
    2008-07-07

最新評(píng)論