使用 CI/CD 優(yōu)化前端構(gòu)建的五種策略
如今使用 CI/CD 工具是網(wǎng)頁應(yīng)用程序開發(fā)的一個必要條件。作為關(guān)鍵開發(fā)路徑的一部分,加快構(gòu)建系統(tǒng)的速度對于提高開發(fā)人員的生產(chǎn)效率是至關(guān)重要的。
原文地址:5 Strategies to Reduce Frontend Build Time with CI/CD 原文作者:Bhagya Vithana 譯文出自:掘金翻譯計劃 本文永久鏈接:github.com/xitu/gold-m… 譯者:Zz 招錦 校對者:Kimhooo、KimYangOfCat

如今使用 CI/CD 工具是網(wǎng)頁應(yīng)用程序開發(fā)的一個必要條件。作為關(guān)鍵開發(fā)路徑的一部分,加快構(gòu)建系統(tǒng)的速度對于提高開發(fā)人員的生產(chǎn)效率是至關(guān)重要的。
因此,在這篇文章中,我們將帶你了解五種使用 CI/CD 優(yōu)化前端構(gòu)建時間的不同策略。
使用并行網(wǎng)絡(luò)包 Parallel-Webpack
Parallel-Webpack 讓你能夠一邊運行一邊進行構(gòu)建應(yīng)用程序,以減少應(yīng)用程序構(gòu)建時間。
你可以通過使用以下 NPM 命令輕松開始使用 Parallel-Webpack:
npm install parallel-webpack —-save-dev
復(fù)制代碼
為了更好地了解 Parallel-Webpack 的配置,我們來看個簡單的示例。
var path = require('path');
module.exports = [{
entry: './firstjob.js',
output: {
path: path.resolve(__dirname, './dist'),
filename: 'task1.bundle.js'
}
},
{
entry: './secondjob.js',
output: {
path: path.resolve(__dirname, './dist'),
filename: 'task2.bundle.js'
}
}];
復(fù)制代碼
上面的配置包括兩個獨立的構(gòu)建任務(wù),分別是 firstjob 和 secondjob。Parallel-Webpack 會同時運行這兩個構(gòu)建任務(wù),你會發(fā)現(xiàn) task1.bundle.js 和 task2.bundle.js 同時被構(gòu)建。
Parallel-Webpack 允許你控制并行性,包括 Webpack 的普通功能,例如觀察者(watcher)和重傳限制(retry limit)。
控制并行性
有時,你可能想限制 Parallel-Webpack 可用的 CPU 核心數(shù)量。在這種情況下,你可以使用 parallel-webpack -p=2 命令指定可用的 CPU 核心數(shù)量。
運行觀察者
讓 Webpack 如此有影響力的功能之一是它的觀察者,它可以持續(xù)地重建你的應(yīng)用程序。你可以在 Parallel-Webpack 中毫不費力地使用同樣的功能,只要在命令中加入 watch 標(biāo)志即可。
parallel-webpack --watch
復(fù)制代碼
同樣地,Parallel-Webpack 中有許多令人興奮的功能,可以集成到你的 CI/CD 管道中,以便加快它的速度。你也可以在文檔中找到更多有關(guān)信息。
將應(yīng)用程序拆分成微前端
假設(shè)考慮傳統(tǒng)的單體前端系統(tǒng),它們中的大部分是只有一個構(gòu)建管道和一個發(fā)布管道。因此,如果有一個錯誤修復(fù)或新功能更新,就有可能破壞 CI/CD 管道中的整個構(gòu)建階段。
然而,如果我們使用微前端,我們可以將應(yīng)用程序的功能拆分,并獨立維護應(yīng)用程序的構(gòu)建和發(fā)布管道,以便不斷提交更新和修復(fù)錯誤。

通常,可以獨立地整合和部署每個應(yīng)用程序,讓你更快地修復(fù)重要功能。因此,這確實對 CI/CD 流程的提速有很大幫助。
組件驅(qū)動型 CI:Ripple CI
組件驅(qū)動型 CI 是指只在修改過的組件和它們的所有依賴關(guān)系(即受影響的組件)上運行的 CI,它不把整個項目作為一個單獨實體。Ripple CI 的典型示例是 Bit。
優(yōu)化 Webpack 的性能
我們通常使用 Webpack 的默認設(shè)置。然而,你是否知道如何通過使用插件和自定義配置進一步優(yōu)化它嗎?
使用 uglifyjs-webpack-plugin v1 插件
壓縮是指在你的網(wǎng)頁中壓縮代碼、標(biāo)記和腳本文件的過程。它是減少構(gòu)建時間的主要方法之一。
但是,隨著項目規(guī)模的擴大,這個修改過程本身也會花費相當(dāng)多的時間。
如果項目正在構(gòu)建,可以使用插件 uglifyjs-webpack-plugin v1 來優(yōu)化構(gòu)建時間。這個插件提供了多進程并行運行的能力和緩存支持,大大提升了構(gòu)建效率。
在壓縮模塊的過程中使用加載器
Webpack 使用加載器將其他類型的文件轉(zhuǎn)化為有效模塊。然后,這些模塊被應(yīng)用程序接收,并添加到依賴關(guān)系圖中。
因此,必須指定相關(guān)的文件目錄,以減少不必要的模塊加載。
在 Webpack 配置中,你可以通過 include 選項輕松指定文件目錄。
const path = require('path');
module.exports = {
module: {
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname, 'src'),
loader: 'css-loader',
},
],
},
};
復(fù)制代碼
NPM 模塊安裝的管道緩存
我們都知道,安裝節(jié)點模塊需要耗費時間。我們發(fā)現(xiàn)了這個問題,特別是在管道中耗費更多時間,因為它們每次運行都會安裝節(jié)點模塊。
NPM 緩存是一種簡單的緩存機制,我們可以在構(gòu)建管道中使用,以避免每次都運行 npm 安裝。
這種緩存機制將使你的構(gòu)建管道與你的本地開發(fā)環(huán)境相似。你只需要安裝一次節(jié)點模塊,同樣的模塊將被用于后續(xù)的構(gòu)建。
例如,讓我們來看一個 NodeJS 項目的 Azure DevOps 管道。
為 NodeJs 項目緩存 NPM 模塊的最推薦方式是使用 NPM 的共享緩存目錄。這個目錄包括所有下載模塊的緩存版本。每當(dāng)我們運行 npm install 命令時,NPM 會首先檢查這個目錄,并在其中獲取存儲的包。
示例代碼
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm
steps:
— task: Cache@2
inputs:
key: ‘npm | “$(Agent.OS)” | package-lock.json’
restoreKeys: |
npm | “$(Agent.OS)”
path: $(npm_config_cache)
displayName: Cache npm
— script: npm ci
復(fù)制代碼
本文總結(jié)
正如你已經(jīng)了解到的,有五種技術(shù)可以加快前端應(yīng)用程序的構(gòu)建時間。此外,還有許多其他技術(shù)可能適合技術(shù)開發(fā)和工作流程。你應(yīng)該選擇適合用例的方法。
同時,我希望這里的討論能幫助你理解以上策略,以加快 CI/CD 流程的前端構(gòu)建時間。
感謝你的閱讀!
如果發(fā)現(xiàn)譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改并 PR,也可獲得相應(yīng)獎勵積分。文章開頭的 本文永久鏈接 即為本文在 GitHub 上的 MarkDown 鏈接。
最后
如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我三個小忙:
點個「在看」,讓更多的人也能看到這篇內(nèi)容(喜歡不點在看,都是耍流氓 -_-)
歡迎加我微信「huab119」拉你進技術(shù)群,長期交流學(xué)習(xí)...
關(guān)注公眾號「前端勸退師」,持續(xù)為你推送精選好文,也可以加我為好友,隨時聊騷。

