真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

webpack打包文件太大怎么解決-創(chuàng)新互聯(lián)

這篇文章主要講解了“webpack打包文件太大怎么解決”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“webpack打包文件太大怎么解決”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、華坪網(wǎng)站維護(hù)、網(wǎng)站推廣。

webpack 把我們所有的文件都打包成一個(gè) JS 文件,這樣即使你是小項(xiàng)目,打包后的文件也會非常大。下面就來講下如何從多個(gè)方面進(jìn)行優(yōu)化。

去除不必要的插件

剛開始用 webpack 的時(shí)候,開發(fā)環(huán)境和生產(chǎn)環(huán)境用的是同一個(gè) webpack 配置文件,導(dǎo)致生產(chǎn)環(huán)境打包的 JS 文件包含了一大堆沒必要的插件,比如

HotModuleReplacementPlugin, NoErrorsPlugin

復(fù)制代碼

這時(shí)候不管用什么優(yōu)化方式,都沒多大效果。所以,如果你打包后的文件非常大的話,先檢查下是不是包含了這些插件。

提取第三方庫

像 react 這個(gè)庫的核心代碼就有 627 KB,這樣和我們的源代碼放在一起打包,體積肯定會很大。所以可以在 webpack 中設(shè)置

{

  entry: {

   bundle: 'app'

    vendor: ['react']

  }

  plugins: {

    new webpack.optimize.CommonsChunkPlugin('vendor',  'vendor.js')

  }

}

這樣打包之后就會多出一個(gè) vendor.js 文件,之后在引入我們自己的代碼之前,都要先引入這個(gè)文件。比如在 index.html 中

除了這種方式之外,還可以通過引用外部文件的方式引入第三方庫,比如像下面的配置

{

  externals: {

     'react': 'React'

  }

}

externals 對象的 key 是給 require 時(shí)用的,比如 require('react'),對象的 value 表示的是如何在 global 中訪問到該對象,這里是 window.React。這時(shí)候 index.html 就變成下面這樣

當(dāng)然,個(gè)人更推薦第一種方式。

目前推薦用 DLL 的方式提取第三方庫。

代碼壓縮

webpack 自帶了一個(gè)壓縮插件 UglifyJsPlugin,只需要在配置文件中引入即可。

{

  plugins: [

    new webpack.optimize.UglifyJsPlugin({

      compress: {

        warnings: false

      }

    })

  ]

}

加入了這個(gè)插件之后,編譯的速度會明顯變慢,所以一般只在生產(chǎn)環(huán)境啟用。

另外,服務(wù)器端還可以開啟 gzip 壓縮,優(yōu)化的效果更明顯。

代碼分割

什么是代碼分割呢?我們知道,一般加載一個(gè)網(wǎng)頁都會把全部的 js 代碼都加載下來。但是對于 web app 來說,我們更想要的是只加載當(dāng)前 UI 的代碼,沒有點(diǎn)擊的部分不加載。

看起來好像挺麻煩,但是通過 webpack 的 code split 以及配合 react router 就可以方便實(shí)現(xiàn)。具體的例子可以看下 react router 的官方示例 huge apps。不過這里還是講下之前配置踩過的坑。

code split 是不支持 ES6 的模塊系統(tǒng)的,所以在導(dǎo)入和導(dǎo)出的時(shí)候千萬要注意,特別是導(dǎo)出。如果你導(dǎo)出組件的時(shí)候用 ES6 的方式,這時(shí)候不管導(dǎo)入是用 CommomJs 還是 AMD,都會失敗,而且還不會報(bào)錯(cuò)!

當(dāng)然會踩到這個(gè)坑也是因?yàn)槲覄倓偛庞? NodeJS,而且一入門就是用 ES6 的風(fēng)格。除了這個(gè)之外,還有一點(diǎn)也要注意,在生產(chǎn)環(huán)境的 webpack 配置文件中,要加上 publicPath

output: {

    path: xxx,

    publicPath: yyy,

    filename: 'bundle.js'

}

不然的話,webpack 在加載 chunk 的時(shí)候,路徑會出錯(cuò)。

設(shè)置緩存

對于靜態(tài)文件,第一次獲取之后,文件內(nèi)容沒改變的話,瀏覽器直接讀取緩存文件即可。那如果緩存設(shè)置過長,文件要更新怎么辦呢?嗯,以文件內(nèi)容的 MD5 作為文件名就是一個(gè)不錯(cuò)的解決方案。來看下用 webpack 應(yīng)該怎樣實(shí)現(xiàn)

output: {

    path: xxx,

    publicPath: yyy,

    filename: '[name]-[chunkhash:6].js'

}

打包后的文件名加入了 hash 值

const bundler = webpack(config)

bundler.run((err, stats) => {

  let assets = stats.toJson().assets

  let name

  for (let i = 0; i < assets.length; i++) {

    if (assets[i].name.startsWith('main')) {

      name = assets[i].name

      break

    }

  }

  fs.stat(config.buildTemplatePath, (err, stats) => {

    if (err) {

      fs.mkdirSync(config.buildTemplatePath)

    }

    writeTemplate(name)

  })

})

手動(dòng)調(diào)用 webpack 的 API,獲取打包后的文件名,通過 writeTemplate 更新 html 代碼。完整代碼猛戳 gitst。

這樣子,我們就可以把文件的緩存設(shè)置得很長,而不用擔(dān)心更新問題。

感謝各位的閱讀,以上就是“webpack打包文件太大怎么解決”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對webpack打包文件太大怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)頁題目:webpack打包文件太大怎么解決-創(chuàng)新互聯(lián)
標(biāo)題來源:http://weahome.cn/article/csedhp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部