自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Webpack 原理與實踐之如何優(yōu)化 Webpack 的打包速度和構(gòu)建效率

開發(fā) 前端
對于不同環(huán)境的配置中,需要先導(dǎo)入公共配置文件,我們在后面對前面的屬性進行覆蓋,但是Object.assign會把之前的完全覆蓋。

寫在前面

在前面文章中介紹了一些webpack配置和特性,能夠提升我們的開發(fā)效率,讓開發(fā)者能夠有著更好的開發(fā)體驗。但是,也伴隨這新的問題出現(xiàn),打包結(jié)果會變得越來越臃腫,因為在這個過程中Webpack為了實現(xiàn)這些特性,會自動往打包結(jié)果中添加一些內(nèi)容。例如之前使用的Source Map會在輸出結(jié)果中添加額外的代碼實現(xiàn)相應(yīng)的功能,但是生產(chǎn)環(huán)境和開發(fā)環(huán)境有所差異,對于生產(chǎn)環(huán)境而言注重的運行效率,在開發(fā)環(huán)境注重的是開發(fā)效率。為此,wepack在4.0版本提供了module模式,方便我們在各種環(huán)境下進行不同的配置。

不同環(huán)境的配置

創(chuàng)建不同的環(huán)境配置的方式主要有兩種:

  • 在配置文件中添加相應(yīng)的判斷條件,根據(jù)環(huán)境不同導(dǎo)出不同配置
  • 為不同環(huán)境單獨添加一個配置文件,一個環(huán)境對應(yīng)一個配置文件
  1. //webpack.config.js  
  2. module.exports = (env,arg)=>{ 
  3.   //不同模式下公共配置 
  4.   const config = { 
  5.    
  6.   } 
  7.    
  8.   if(env === "development"){ 
  9.     //為config添加開發(fā)模式下的特殊配置 
  10.     config.mode = "development" 
  11.     config.devtool = "cheap-eval-module-source-map" 
  12.   }else if(env === "production"){ 
  13.     //為config添加生產(chǎn)模式下的特殊配置 
  14.     config.mode = "production" 
  15.     config.devtool = "nosources-source-map" 
  16.   } 
  17.   return config 

通過上面的配置文件,我們可以在終端運行根據(jù)不同環(huán)境判斷執(zhí)行不同的配置,對于大型環(huán)境適合在不同環(huán)境條件下使用不同的配置。我們可以將公共模式的文件抽取出來,分別設(shè)置開發(fā)環(huán)境和生產(chǎn)環(huán)境下的模式文件。

  1. //webpack.common.js 
  2. module.exports = { 
  3.   //公共配置 
  4.  
  5. //webpack.prod.js 
  6. const common = require("./webpack.common"
  7. module.exports = Object.assign(common,{ 
  8.   //生產(chǎn)模式配置 
  9. }) 
  10.  
  11. //webpack.dev.js 
  12. const common = require("./webpack.common"
  13. module.exports = Object.assign(common,{ 
  14.   //開發(fā)模式配置 
  15. }) 

對于不同環(huán)境的配置中,需要先導(dǎo)入公共配置文件,我們在后面對前面的屬性進行覆蓋,但是Object.assign會把之前的完全覆蓋。對于plugins數(shù)組我們需要在原先的基礎(chǔ)中添加配置,為此我們需要lodash的merge函數(shù)或者webpack社區(qū)的webpack-merge插件進行使用。

  1. //webpack.common.js 
  2. module.exports = { 
  3.   //公共配置 
  4.  
  5. //webpack.prod.js 
  6. const merge = require("webpack-merge"
  7. const common = require("./webpack.common"
  8. module.exports = merge(common,{ 
  9.   //生產(chǎn)模式配置 
  10. }) 
  11.  
  12. //webpack.dev.js 
  13. const merge = require("webpack-merge"
  14. const common = require("./webpack.common"
  15. module.exports = merge(common,{ 
  16.   //開發(fā)模式配置 
  17. }) 

在分別配置完成過后,回到命令行終端,嘗試運行webpack打包,不過因為這里已經(jīng)沒有默認的配置文件,所以需要通過--config參數(shù)來指定所使用的配置文件路徑。

  1. $ webpack --config webpack.prod.js 

生產(chǎn)環(huán)境下的優(yōu)化插件

在weback4中新增的production模式下,內(nèi)部已經(jīng)自動開啟了很多通用的優(yōu)化功能,對于使用者而言可以開箱即用。對于學(xué)習(xí)者而言,開箱即用會導(dǎo)致忽略很多需要了解的東西,以至于出現(xiàn)問題無從下手。

  1. const webpack = require("webpack"); 
  2.  
  3. module.exports = { 
  4.   //其他配置 
  5.   plugins:[ 
  6.     new webpack.DefinePlugin({ 
  7.       API_BASE_URL:"https://api.example.com" 
  8.     }) 
  9.   ] 

我們看到值要求的是一個代碼片段:

  1. const webpack = require("webpack"); 
  2.  
  3. module.exports = { 
  4.   //其他配置 
  5.   plugins:[ 
  6.     new webpack.DefinePlugin({ 
  7.       API_BASE_URL:JSON.stringify("https://api.example.com"
  8.     }) 
  9.   ] 

參考文章

《webpack原理與實踐》

《webpack中文文檔》

寫在最后

本文介紹了如何在webpack添加不同環(huán)境的配置文件,以及在生產(chǎn)模式打包時經(jīng)常用到的幾個插件。我們可以針對生產(chǎn)環(huán)境下的打包進行優(yōu)化,能夠提升生產(chǎn)環(huán)境的運行效率。

 

責(zé)任編輯:武曉燕 來源: 前端萬有引力
相關(guān)推薦

2021-12-16 22:02:28

webpack原理模塊化

2021-12-25 22:29:04

WebpackRollup 前端

2019-03-15 15:00:49

Webpack構(gòu)建速度前端

2021-12-20 00:03:38

Webpack運行機制

2021-12-19 07:21:48

Webpack 前端插件機制

2021-12-15 23:42:56

Webpack原理實踐

2021-07-04 22:22:23

Webpack5前端工具

2024-05-27 00:00:01

2021-12-21 14:00:25

WebpackDevServer的開發(fā)

2021-12-22 22:44:49

Webpack熱替換模塊

2021-12-17 00:02:28

Webpack資源加載

2021-09-06 06:45:06

Webpack優(yōu)化MindMaster

2017-03-24 10:56:21

Webpack技巧建議

2017-05-02 16:29:11

Webpack技巧建議

2024-09-27 11:46:51

2021-05-10 08:34:47

webpack手段devServer

2020-09-19 21:26:56

webpack

2020-08-05 08:21:41

Webpack

2021-06-28 05:59:17

Webpack 前端打包與工程化

2019-03-26 10:02:16

WebpackJavascript前端
點贊
收藏

51CTO技術(shù)棧公眾號