目錄
快取
網頁載入
html
css分離
common
本地開發
打包速度
DllPlugin
happypack
devtool
babel-loader
noParse && alias
tree shaking
壓縮
UglifyJsPlugin
UglifyJsParallelPlugin
其他
腳本cdn
分析
首頁 web前端 css教學 Webpack的經驗分享

Webpack的經驗分享

Feb 02, 2018 pm 02:28 PM
web webpack 經驗

webpack 是一個模組打包器。它的主要目標是將JavaScript檔案打包在一起,打包後的檔案用於在瀏覽器中使用,但它也能夠勝任轉換(transform)、打包(bundle)或包裹(package),本文主要和大家分享Webpack的一些經驗,希望能幫助大家。

快取

產生檔案名稱 [name].[contenthash:8].js,結合 max-age + cdn 來做快取。

網頁載入

html

以前是固定的一個html,html - 版本號js 檔案(透過webpack打出來的)-」透過版本號碼決定具體js 。 (現在想想不太合理,雖然沒和後台耦合這麼重)

現在是變動的html,透過HtmlWebpackPlugin 打出來(webpack 生成,裡麵包含版本號的js)

這樣也省了一個串列時間(拉版本號檔)。 同時也方便做灰度,例如發佈了需求,讓一部分使用者先體驗,動態打出 html 給到後台即可。 (固定 html 則沒這麼輕鬆做)

css分離

在觀麥,css變動會非常的少,這得益於 react-gm 對類別名稱的完善。 既然變動少,把 css 單獨出來也不錯,使用 ExtractTextPlugin 分離 css。

分離後減少 js 大小,不阻塞 js,同時 css 和 js 可同時拉取。

common

new CommonsChunkPlugin({name: 'commons'})
登入後複製

看打包後的 common 程式碼,會發現其他模組的id和hash都會打在common中,這樣每次 commons 檔案都會變,就很難做快取了。

提供兩個檔案清單即可,會發現 webpack 酒吧 id 和 hash 打在 manifest 檔案中。這樣commons就可以快取了。 btw,沒看到官網有介紹,看到的說聲。

new CommonsChunkPlugin({names: ['commons', 'manifest']})
登入後複製

本地開發

講講代理,本地開始是自己起的服務,沒有後台服務,自然需要代理到某個地方。 可透過 devServer.proxy 。也可代理到外網排查 bug,都是源碼,查 bug 非常快。

"proxy": {
    "/ticket/*": {
      "target": "http://dev.guanmai.cn:7413",
      "changeOrigin": true
    }
}
登入後複製

打包速度

DllPlugin

當專案大了後,必然需要打很多包,導致打包時間非常長。 官方推薦做法是把不常變動的文件打DLL。

我們工程就把 react react-dom prop-types classnames mobx#mobx-react lodash moment big.js 等打進來。

網路資料都介紹dll 的檔名是[name]_[hash].dll.js, 我們是[npm version]_dll.js npm version 是package.json version 讀進來的。

為什麼不用 hash 而是 npm version?我們在思考二次打包的時候遇到了問題,怎麼判斷 dll 是否需要重新打包?如果是 hash 怎麼搞(求推薦方案)。用 npm version 的話只要 version 一改變我們會重新打包,比如昇級了 react ,我們就會 version +,就會重新打包。

happypack

happypack 對 build 的速度大大大提示,可以多執行緒打包,cache 也讓 rebuild 加快。

devtool

開發用eval,生產用source-map(用於排查顯示問題,犧牲了打包速度,在可接受範圍內)

babel-loader

記得cacheDirectory

noParse && alias

有些函式庫不需要解析的,noParse 設定不解析,同時alias 指向x.min.js 檔案。

tree shaking

沒有用上,感覺還不是時候。有篇文章不錯你的Tree-Shaking並沒有什麼卵用

壓縮

UglifyJsPlugin

一開始用的是webpack.optimize.UglifyJsPlugin,那時1.x版本,webpack 是基於uglify-js@2.x。

現在 webpack 單獨出來了, 也多了很多功能,支援 cache ,支援多核心壓縮,我試用了下速度還是挺快的。 webpack.optimize.UglifyJsPlugin 其實是 uglifyjs-webpack-plugin。

令我奇怪的是官方說是基於 uglify-es 。但我看依賴還是 uglify-js。奇怪。

UglifyJsParallelPlugin

在官方沒出來前用的是 webpack-uglify-parallel , 支持多核心。速度和 uglifyjs-webpack-plugin 差不了多少。

寫文章是翻了下 github,發現7月份的時候開始廢棄了,整合到官方了。

其他

babel 出的 babel-minify-webpack-plugin,保持觀望。

腳本cdn

有些js(gm-fetch babel-polyfill) 實在是非常少非常少變動,用webpack 打包有點浪費,可以透過cdn 獲取,script 形式放入html 文件內。

分析

有圖表,非常直覺的分析。我比較喜歡。
webpack-monitor

老牌的是webpack-bundle-analyzer

相關建議:

Web使用webpack建立前端專案的實例程式碼

webpack設定方法小結

node.js中的npm與webpack設定方法詳解

以上是Webpack的經驗分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE3入門教學:使用Webpack進行打包和構建 VUE3入門教學:使用Webpack進行打包和構建 Jun 15, 2023 pm 06:17 PM

Vue是一款優秀的JavaScript框架,它可以幫助我們快速建立互動性強、高效性好的Web應用程式。 Vue3是Vue的最新版本,它引入了許多新的功能和功能。 Webpack是目前最受歡迎的JavaScript模組打包器和建置工具之一,它可以幫助我們管理專案中的各種資源。本文就為大家介紹如何使用Webpack打包和建構Vue3應用程式。 1.安裝Webpack

Java API 開發中使用 Jetty7 進行 Web 伺服器處理 Java API 開發中使用 Jetty7 進行 Web 伺服器處理 Jun 18, 2023 am 10:42 AM

JavaAPI開發中使用Jetty7進行Web伺服器處理隨著互聯網的發展,Web伺服器已經成為了應用程式開發的核心部分,同時也是許多企業所關注的焦點。為了滿足日益增長的業務需求,許多開發人員選擇使用Jetty進行Web伺服器開發,其靈活性和可擴展性受到了廣泛的認可。本文將介紹如何在JavaAPI開發中使用Jetty7進行We

如何使用Golang實作網頁應用程式的表單驗證 如何使用Golang實作網頁應用程式的表單驗證 Jun 24, 2023 am 09:08 AM

表單驗證是Web應用程式開發中非常重要的環節,它能夠在提交表單資料之前對資料進行有效性檢查,避免應用程式出現安全漏洞和資料錯誤。使用Golang可以輕鬆實現網頁應用程式的表單驗證,本文將介紹如何使用Golang來實作網頁應用程式的表單驗證。一、表單驗證的基本要素在介紹如何實作表單驗證之前,我們需要知道表單驗證的基本要素是什麼。表單元素:表單元素是指

如何從駕駛艙Web使用者介面啟用管理訪問 如何從駕駛艙Web使用者介面啟用管理訪問 Mar 20, 2024 pm 06:56 PM

Cockpit是一個面向Linux伺服器的基於Web的圖形介面。它主要是為了使新用戶/專家用戶更容易管理Linux伺服器。在本文中,我們將討論Cockpit存取模式以及如何從CockpitWebUI切換Cockpit的管理存取。內容主題:駕駛艙進入模式查找當前駕駛艙訪問模式從CockpitWebUI啟用Cockpit的管理訪問從CockpitWebUI禁用Cockpit的管理訪問結論駕駛艙進入模式駕駛艙有兩種訪問模式:受限訪問:這是駕駛艙的默認訪問模式。在這種存取模式下,您無法從駕駛艙Web用戶

web標準是什麼東西 web標準是什麼東西 Oct 18, 2023 pm 05:24 PM

Web標準是一組由W3C和其他相關組織制定的規範和指南,它包括HTML、CSS、JavaScript、DOM、Web可訪問性和性能優化等方面的標準化,透過遵循這些標準,可以提高頁面的兼容性、可訪問性、可維護性和效能。 Web標準的目標是使Web內容能夠在不同的平台、瀏覽器和裝置上一致地展示和交互,提供更好的使用者體驗和開發效率。

PHP在Web開發中是屬於前端還是後端? PHP在Web開發中是屬於前端還是後端? Mar 24, 2024 pm 02:18 PM

PHP在Web開發中是屬於後端。 PHP是一種伺服器端腳本語言,主要用於處理伺服器端的邏輯,產生動態網頁內容。與前端技術相比,PHP更多地用於與資料庫互動、處理使用者請求以及生成頁面內容等後端操作。接下來透過具體的程式碼範例來說明PHP在後端開發中的應用。首先,我們來看一個簡單的PHP程式碼範例,用於連接資料庫並查詢資料:

PHP開發心得分享:掌握各種功能實現的經驗與建議 PHP開發心得分享:掌握各種功能實現的經驗與建議 Nov 22, 2023 pm 12:02 PM

在當前網路高速發展的時代,PHP作為一種伺服器端腳本語言,被越來越多的開發者所採用。 PHP具有簡單易學、靈活、開源免費等優勢,可快速開發各種網站和Web應用。然而,身為PHP開發者,要想在激烈的競爭中脫穎而出並寫出高效穩定的程式碼,還需要掌握各種功能的實現技巧和經驗。首先,合理規劃專案架構是開發PHP應用的關鍵。一個良好的專案架構可以提供更好的程式碼可維

web是什麼意思 web是什麼意思 Jan 09, 2024 pm 04:50 PM

web是全球廣域網,也稱為萬維網,是互聯網的一種應用形式。 Web 是一種基於超文本和超媒體的資訊系統,它允許使用者透過超連結在不同的網頁之間跳轉,從而瀏覽和獲取資訊。 Web 的基礎是互聯網,它使用統一、標準化的協定和語言,使得不同電腦之間能夠進行資料交換和資訊共享。

See all articles