webpack 引入外鏈 js 插件 lib-webpack-plugin

libwebpackplugin 的誕生

由于作者做的 map-web 前端項(xiàng)目(一個(gè)基于 WebGL引擎項(xiàng)目)踏堡,需要引入3d引擎代碼庫(kù)相關(guān)文件猎唁, 發(fā)現(xiàn)在引入 webgl 文件夾時(shí)候 ,每次需要手動(dòng) 復(fù)制 / 粘貼到 map-web 項(xiàng)目中顷蟆,包括版本測(cè)試诫隅,發(fā)版本等等。
這種手動(dòng)的重復(fù)性勞動(dòng)非常浪費(fèi)相關(guān)開發(fā)人員的精力帐偎,因此整理了下公司前端與底層webgl的自動(dòng)化項(xiàng)目構(gòu)建方案逐纬。( 本人是強(qiáng)迫癥患者 -。- )

起初腦海里面有兩個(gè)方案:

  1. 通過 npm 包方式 進(jìn)行引入和版本管理
    相當(dāng)于每次底層構(gòu)建完 webgl 底層項(xiàng)目削樊,修改相應(yīng) package 版本豁生,然后 npm publish 到 npm 服務(wù)器兔毒,前端項(xiàng)目通過 npm install 的方式進(jìn)行引入。

  2. 通過 服務(wù)鏈接提供方式 進(jìn)行引入和版本管理
    相當(dāng)于每次構(gòu)建完 webgl 底層項(xiàng)目后甸箱, push 構(gòu)建后的代碼到自己的 cdn 服務(wù)器上育叁,使用人員通過 script 腳本進(jìn)行引入 http://xxx.cdn.com/1.0.0/webgl.js
    (這里需要注意一下版本的控制芍殖,由于緩存影響豪嗽,這里采用版本號(hào)即文件夾形式進(jìn)行控制,同時(shí)還方便了歷史版本管理围小, 每次構(gòu)建項(xiàng)目到版本號(hào)對(duì)應(yīng)的文件夾下面 昵骤,類似 / dist /webgl.js -> / x.x.x /webgl.js 树碱,
    至于 cdn 緩存的相關(guān)知識(shí)不是本文重點(diǎn)這里不作介紹 感興趣可查看緩存相關(guān)資料)

適合自己的才是最好的

在實(shí)踐的過程中發(fā)現(xiàn)肯适, 由于構(gòu)建項(xiàng)目文件數(shù)量多以及單個(gè)文件大小過大 (webgl js 需要3M多),通過方案一方式進(jìn)行進(jìn)行管理成榜,每次底層webglx項(xiàng)目 build -> npm publish 與
前端項(xiàng)目 npm install -> build 的過程框舔,在時(shí)間的耗費(fèi)上是很恐怖的。
因此做了對(duì)比之后果斷拋棄了這種方案赎婚, 因?yàn)榉桨付?只在 build -> npm pulish 耗費(fèi)時(shí)間刘绣,在前端項(xiàng)目中只需要 script 引入外部資源就可以。

為了追求更加的方便

在做完底層庫(kù)的構(gòu)建流程優(yōu)化之后挣输,又有新的思考纬凤,在前端項(xiàng)目中(作者做的都是偏向 spa 項(xiàng)目),引入webgl 資源時(shí)候撩嚼,難道每次版本測(cè)試或者版本發(fā)布都需要手動(dòng)的去替換 script 對(duì)應(yīng)版本鏈接的 src 嗎停士?
腦海里第一反應(yīng)就是 需要添加一個(gè) 外部資源版本配置文件,只需要修改 外部資源 版本號(hào)就可以完丽, 在 build 時(shí)候?qū)崿F(xiàn)自動(dòng)化添加修改 script 的相應(yīng)版本 src 鏈接到 html 中恋技。類似:

// lib.config.js
module.exports = {
libs: [{
  name: "lib1-name ", 
  version: "x.x.x", //  通過配置來修改此版本號(hào)
  path: "http://xxx.xxx.com"
}, {
  name: "lib2-name ", 
  version: "x.x.x", 
  path: "http://xxx.xxx.com"
}]
} 
// webpack.config.js
const LibWebpackPlugin = require("lib-webpack-plugin");
const libs = require("./lib.config.js").libs;
module.exports = {
  entry:  "",
  output:  {},
  plugins: [
    new LibWebpackPlugin(libs)
  ]
}
個(gè)人感覺 配置文件除了解耦和方便管理的好處,還避免你不夠細(xì)心的話 手動(dòng)錯(cuò)誤修改了 src 

至此初步方案已經(jīng)成型逻族。
因此 lib-webpack-plugin 誕生了蜻底。

libwebpackplugin 的第一個(gè)版本

首先這是一個(gè) webapck 插件, 既然是插件 就要先了解 webpack 的 Compiler模塊 和 hooks 機(jī)制, 中文鏈接附上 compiler-hook 聘鳞。

由于本插件基于 html-webpack-plugin 插件薄辅,因此還需要了解 此插件的相關(guān) hooks

libwebpackplugin 的具體使用和源代碼可以查看 lib-webpack-plugin

由于這是第一個(gè)版本, 功能很簡(jiǎn)單抠璃,只是暫時(shí)滿足了初步應(yīng)用长搀,我會(huì)繼續(xù)優(yōu)化迭代下一個(gè)版本 ??

其他

很意外的是,居然有人開始引用這個(gè)插件了(目前只是一個(gè)待優(yōu)化的初略版本)鸡典,看來大家在做項(xiàng)目的時(shí)候都有這方面的需求源请,這給我繼續(xù)迭代下個(gè)版本無形中又加了不少動(dòng)力。(手動(dòng)比 ??)

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谁尸,隨后出現(xiàn)的幾起案子舅踪,更是在濱河造成了極大的恐慌,老刑警劉巖良蛮,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抽碌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡决瞳,警方通過查閱死者的電腦和手機(jī)货徙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皮胡,“玉大人痴颊,你說我怎么就攤上這事÷藕兀” “怎么了蠢棱?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)甩栈。 經(jīng)常有香客問我泻仙,道長(zhǎng),這世上最難降的妖魔是什么量没? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任玉转,我火速辦了婚禮,結(jié)果婚禮上殴蹄,老公的妹妹穿的比我還像新娘究抓。我一直安慰自己,他們只是感情好饶套,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布漩蟆。 她就那樣靜靜地躺著,像睡著了一般妓蛮。 火紅的嫁衣襯著肌膚如雪怠李。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天蛤克,我揣著相機(jī)與錄音捺癞,去河邊找鬼。 笑死构挤,一個(gè)胖子當(dāng)著我的面吹牛髓介,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筋现,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼唐础,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼箱歧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起一膨,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤呀邢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后豹绪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體价淌,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年瞒津,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝉衣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巷蚪,死狀恐怖病毡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钓辆,我是刑警寧澤剪验,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布肴焊,位于F島的核電站前联,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏娶眷。R本人自食惡果不足惜似嗤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望届宠。 院中可真熱鬧烁落,春花似錦、人聲如沸豌注。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轧铁。三九已至每聪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間齿风,已是汗流浹背药薯。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留救斑,地道東北人童本。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像脸候,于是被迫代替她去往敵國(guó)和親穷娱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绑蔫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348