webpack4 系列教程(十二):處理第三方JavaScript庫

專注前端與算法的系列干貨分享冰沙,歡迎關(guān)注(???):
「微信公眾號(hào):心譚博客」| xin-tan.com | GitHub

0. 課程介紹和資料

本節(jié)課的代碼目錄如下:

image

本節(jié)課的package.json內(nèi)容如下:

{
  "dependencies": {
    "jquery": "^3.3.1"
  },
  "devDependencies": {
    "webpack": "^4.16.1"
  }
}

1. 如何使用和管理第三方JS庫拓挥?

項(xiàng)目做大之后,開發(fā)者會(huì)更多專注在業(yè)務(wù)邏輯上当叭,其他方面則盡力使用第三方JS庫來實(shí)現(xiàn)盖灸。

由于js變化實(shí)在太快,所以出現(xiàn)了多種引入和管理第三方庫的方法醉箕,常用的有 3 中:

  1. CDN:<script></script>標(biāo)簽引入即可
  2. npm 包管理: 目前最常用和最推薦的方法
  3. 本地js文件:一些庫由于歷史原因徙垫,沒有提供es6版本,需要手動(dòng)下載己英,放入項(xiàng)目目錄中吴旋,再手動(dòng)引入。

針對(duì)第一種和第二種方法荧关,各有優(yōu)劣褂傀,有興趣可以看這篇:《CDN 使用心得:加速雙刃劍》

針對(duì)第三種方法,如果沒有webpack同波,則需要手動(dòng)引入import或者require來加載文件叠国;但是,webpack提供了alias的配置冤狡,配合webpack.ProvidePlugin這款插件,可以跳過手動(dòng)入悲雳,直接使用!

2. 編寫入口文件

如項(xiàng)目目錄圖片所展示的坦胶,我們下載了jquery.min.js晴楔,放到了項(xiàng)目中税弃。同時(shí),我們也通過npm安裝了jquery则果。

為了盡可能模仿生產(chǎn)環(huán)境,app.js中使用了$來調(diào)用 jq导匣,還使用了jQuery來調(diào)用 jq茸时。

因?yàn)檎巾?xiàng)目中,由于需要的依賴過多缓待,掛載到window對(duì)象的庫渠牲,很容易發(fā)生命名沖突問題。此時(shí)瘫镇,就需要重命名庫答姥。例如:$就被換成了jQuery

// app.js
$("div").addClass("new");

jQuery("div").addClass("old");

// 運(yùn)行webpack后
// 瀏覽器打開 index.html, 查看 div 標(biāo)簽的 class

3. 編寫配置文件

webpack.ProvidePlugin參數(shù)是鍵值對(duì)形式尚粘,鍵就是我們項(xiàng)目中使用的變量名敲长,值就是鍵所指向的庫秉继。

webpack.ProvidePlugin會(huì)先從npm安裝的包中查找是否有符合的庫泽铛。

如果webpack配置了resolve.alias選項(xiàng)(理解成“別名”)厚宰,那么webpack.ProvidePlugin就會(huì)順著這條鏈一直找下去遂填。

// webpack.config.js
const path = require("path");
const webpack = require("webpack");

module.exports = {
  entry: {
    app: "./src/app.js"
  },
  output: {
    publicPath: __dirname + "/dist/",
    path: path.resolve(__dirname, "dist"),
    filename: "[name].bundle.js",
    chunkFilename: "[name].chunk.js"
  },
  resolve: {
    alias: {
      jQuery$: path.resolve(__dirname, "src/vendor/jquery.min.js")
    }
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: "jquery", // npm
      jQuery: "jQuery" // 本地Js文件
    })
  ]
};

4. 結(jié)果分析和驗(yàn)證

老規(guī)矩,根絕上面配置撵幽,先編寫一下index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div></div>
  <script src="./dist/app.bundle.js"></script>
</body>

</html>

命令行運(yùn)行webpack進(jìn)行項(xiàng)目打包:

image

在 Chrome 中打開index.html盐杂。如下圖所示哆窿,<div>標(biāo)簽已經(jīng)被添加上了oldnew兩個(gè)樣式類。證明在app.js中使用的$jQuery都成功指向了jquery庫强衡。

image

專注前端與算法的系列干貨分享码荔,歡迎關(guān)注(???)


image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缩搅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子究飞,更是在濱河造成了極大的恐慌堂鲤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袱蜡,死亡現(xiàn)場離奇詭異坪蚁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)敏晤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門嘴脾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耗拓,你說我怎么就攤上這事奏司。” “怎么了韵洋?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵搪缨,是天一觀的道長。 經(jīng)常有香客問我负甸,道長齿桃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任带污,我火速辦了婚禮香到,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘千绪。我一直安慰自己梗脾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布瑞妇。 她就那樣靜靜地躺著,像睡著了一般辕狰。 火紅的嫁衣襯著肌膚如雪蔓倍。 梳的紋絲不亂的頭發(fā)上悬钳,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天偶翅,我揣著相機(jī)與錄音,去河邊找鬼灾测。 笑死垦巴,一個(gè)胖子當(dāng)著我的面吹牛铭段,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播憔披,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爸吮!你這毒婦竟也來了芬膝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤形娇,失蹤者是張志新(化名)和其女友劉穎锰霜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桐早,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡癣缅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哄酝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片友存。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陶衅,死狀恐怖屡立,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搀军,我是刑警寧澤膨俐,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布抡秆,位于F島的核電站,受9級(jí)特大地震影響吟策,放射性物質(zhì)發(fā)生泄漏儒士。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一檩坚、第九天 我趴在偏房一處隱蔽的房頂上張望着撩。 院中可真熱鬧,春花似錦匾委、人聲如沸拖叙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薯鳍。三九已至,卻和暖如春挨措,著一層夾襖步出監(jiān)牢的瞬間挖滤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工浅役, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斩松,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓觉既,卻偏偏與公主長得像惧盹,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瞪讼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1钧椰、一個(gè)打包工具 2、一個(gè)模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,638評(píng)論 0 16
  • 目錄第1章 webpack簡介 11.1 webpack是什么符欠? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,731評(píng)論 0 1
  • GitChat技術(shù)雜談 前言 本文較長嫡霞,為了節(jié)省你的閱讀時(shí)間,在文前列寫作思路如下: 什么是 webpack背亥,它要...
    蕭玄辭閱讀 12,671評(píng)論 7 110
  • 文/月明紅紅 我在深深地懷念秒际,懷念記憶中給了我無私幫助的朋友,我要祝福那些愛過我的人狡汉。 在20歲之前娄徊,秋云的世界是...
    月明紅紅閱讀 1,082評(píng)論 13 42
  • 今天晚上我和媽媽回家的時(shí)候看見了一棟很大很大的樓,他不是樓是一個(gè)小隧道盾戴,上面有一個(gè)小房子寄锐,小房子里面有一...
    段林濤0942閱讀 310評(píng)論 1 0