webpack4系列教程(一):初識(shí)webpack

1. 什么是webpack

先來(lái)看看官網(wǎng)對(duì)webpack的介紹 :

本質(zhì)上玖翅,webpack是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器(module bundler)屯远。當(dāng) webpack 處理應(yīng)用程序時(shí)嗜闻,它會(huì)遞歸地構(gòu)建一個(gè)依賴關(guān)系圖(dependency graph)烤镐,其中包含應(yīng)用程序需要的每個(gè)模塊,然后將所有這些模塊打包成一個(gè)或多個(gè)bundle

簡(jiǎn)單來(lái)說(shuō)webpack就是一個(gè)JavaScript的打包器,將各種模塊(module)打包成資源文件吠冤;還可以通過(guò) Code Spliting 來(lái)把代碼分離到不同的 bundle 中,然后可以按需加載或并行加載這些文件恭理;webpack 可以使用 loader 來(lái)預(yù)處理文件拯辙,這允許你打包除了JavaScript 之外的任何靜態(tài)資源。

官網(wǎng)首頁(yè)很清晰的展示了webpack的主要功能:

?

image

我們可以看到颜价,一堆 modules 經(jīng)過(guò) webpack 打包處理成了各種靜態(tài)資源薄风。這就是 webpack

2. webpack核心概念

在開(kāi)始學(xué)習(xí) webpack 之前,你需要了解 webpack 的四個(gè)核心概念:

  • 入口(entry)
  • 出口(output)
  • loader
  • 插件(plugins)

2.1 入口(entry)

入口指示 webpack 應(yīng)該使用哪個(gè)模塊拍嵌,來(lái)開(kāi)始構(gòu)建其內(nèi)部依賴。進(jìn)入入口后循诉,webpack 會(huì)找出有哪些模塊和庫(kù)是與入口相依賴的横辆。

我們可以在webpack配置中配置entry屬性,來(lái)設(shè)置一個(gè)或多個(gè)入口起點(diǎn)。以下是一個(gè)簡(jiǎn)單的entry配置:

const config = {
  entry: {
    main: 'path/to/your/entry/index.js'
  }
}
module.exports = config

2.2 出口(output)

設(shè)置output是為了告訴webpack要在哪里輸出其創(chuàng)建的bundle狈蚤,并且可以對(duì)bundle命名困肩。示例:

const path = require('path')
const config = {
  entry: {
    main: 'path/to/your/entry/index.js'
  },  
  output: {
    filename:'[name].bundle.js',
    path: path.join(__dirname,'./dist')  
  }
}
module.exports = config

我們通過(guò) output.filename 來(lái)設(shè)置輸出bundle的文件名脆侮, output.path 來(lái)設(shè)置 bundle 的輸出路徑

path 是 nodeJs 中的核心模塊锌畸,用來(lái)處理項(xiàng)目中的路徑。

2.3 loader

由于 webpack 只認(rèn)識(shí) JavaScript 代碼靖避,因此就需要借助其他方法來(lái)處理那些非 JavaScript 文件潭枣,如 css、image幻捏、font等盆犁。而 loader 可以將所有類(lèi)型的文件處理成 webpack 能夠識(shí)別的有效模塊,然后再對(duì)其進(jìn)行處理篡九。

loader 中有兩個(gè)重要屬性:
  1. test屬性谐岁,用于標(biāo)識(shí)出應(yīng)該被對(duì)應(yīng)的 loader 進(jìn)行轉(zhuǎn)換的某個(gè)或某些文件,通常是一個(gè)正則表達(dá)式榛臼;
  2. use屬性伊佃,表示進(jìn)行轉(zhuǎn)換時(shí),應(yīng)該使用哪個(gè) loader沛善;
const path = require('path')
 
const config = {
  entry: {
    main: 'path/to/your/entry/index.js'
  }航揉,
  output: {
    filename: '[name].bundle.js',
    path: path.join(__dirname, './dist')
  },
  module: {
    loaders: [
      {
        test: /\.ejs$/,
        use: ['ejs-loader']
      }
    ]
  }
}
 
module.exports = config

以上示例中l(wèi)oader的配置相當(dāng)于告訴webpack在遇到 .ejs 的文件時(shí),在打包之前先用 ejs-loader 裝換一下路呜。

2.4 插件(plugins)

loader 被用于轉(zhuǎn)換某些類(lèi)型的模塊迷捧,而插件則可以用于執(zhí)行范圍更廣的任務(wù)。想要使用一個(gè)插件胀葱,你只需要require()它漠秋,然后把它添加到plugins數(shù)組中。多數(shù)插件可以通過(guò)選項(xiàng)(option)自定義抵屿。

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin') // 通過(guò) npm 安裝
 
const config = {
  entry: {
    main: 'path/to/your/entry/index.js'
  }庆锦,
  output: {
    filename: '[name].bundle.js',
    path: path.join(__dirname, './dist')
  },
  module: {
    loaders: [
      {
        test: /\.ejs$/,
        use: ['ejs-loader']
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'webpack demo',
      template: path.join(__dirname, './index.html')
    })
  ]
}
 
module.exports = config

HtmlWebpackPlugin 將為你生成一個(gè) HTML5 文件, 其中包括使用script標(biāo)簽的 body 中的所有 webpack 包轧葛,webpack 提供提供了許多功能強(qiáng)大的插件搂抒,查閱插件列表獲取更多插件的使用方法。

傳送門(mén):

webpack4系列教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尿扯,一起剝皮案震驚了整個(gè)濱河市求晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衷笋,老刑警劉巖芳杏,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爵赵,警方通過(guò)查閱死者的電腦和手機(jī)吝秕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)空幻,“玉大人烁峭,你說(shuō)我怎么就攤上這事★躅酰” “怎么了约郁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)如捅。 經(jīng)常有香客問(wèn)我棍现,道長(zhǎng),這世上最難降的妖魔是什么镜遣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任己肮,我火速辦了婚禮,結(jié)果婚禮上悲关,老公的妹妹穿的比我還像新娘谎僻。我一直安慰自己,他們只是感情好寓辱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布艘绍。 她就那樣靜靜地躺著,像睡著了一般秫筏。 火紅的嫁衣襯著肌膚如雪肃弟。 梳的紋絲不亂的頭發(fā)上免姿,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼身坐。 笑死金吗,一個(gè)胖子當(dāng)著我的面吹牛罗珍,可吹牛的內(nèi)容都是我干的糊秆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼冷蚂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缭保!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蝙茶,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤艺骂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后隆夯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彻亲,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孕锄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苞尝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宦芦,死狀恐怖宙址,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情调卑,我是刑警寧澤抡砂,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站恬涧,受9級(jí)特大地震影響注益,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溯捆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一丑搔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧提揍,春花似錦啤月、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至刨仑,卻和暖如春郑诺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杉武。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工辙诞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艺智。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓倘要,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親十拣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子封拧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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