1疼邀、webpack從0到1-開始

這系列文章就是手把手教你如何從零構(gòu)建一個(gè)webpack項(xiàng)目。目的就是為了了解webpack打包怎么玩的召锈,平常項(xiàng)目開發(fā)中所用如ES6語法旁振、less、vue是如何被打包的涨岁,是一個(gè)比較基礎(chǔ)的內(nèi)容拐袜,我也是為了總結(jié)一下這方面的知識(shí)點(diǎn),梳理一下個(gè)人的知識(shí)體系而寫下這些文字梢薪。
工具及版本:vscode蹬铺、webpack(v4.41.5)、node(v10.16.0)
git倉(cāng)庫(kù):webpack-demo

1秉撇、什么是webpack甜攀?

  • “webpack is a module bundler.”webpack官網(wǎng)上打開自我介紹就是這句話,它是一個(gè)模塊打包器琐馆。
  • webpack是一個(gè)模塊打包工具规阀,可以打包js、圖片資源啊等等瘦麸,功能十分強(qiáng)大谁撼,但是在最開始的時(shí)候呢,webpack只是個(gè)js模塊打包工具∽趟牵現(xiàn)在就讓我們回到webpack最初的模樣彤敛,從怎么用它打包js文件開始。

2了赌、初始化

  • 即然從零開始墨榄,首先自然得從git倉(cāng)庫(kù)建立開始,怎么詳細(xì)的從零建一個(gè)git倉(cāng)庫(kù)我有寫過了(->傳送門)勿她,這個(gè)系列文章代碼所對(duì)應(yīng)的git倉(cāng)庫(kù):webpack-demo袄秩。

  • 進(jìn)入到webpack-demo下的chapter1中,輸npm init初始化生成一個(gè)package.json文件逢并。(這里一路回車下一步下一步就行之剧,或者npm init -y直接生成一個(gè)默認(rèn)的文件)

$ cd webpack-demo/chapter1
$ npm init -y
  • 新建一個(gè)src文件夾并在其中新建一個(gè)index.js文件:
var div = document.createElement("div");
div.innerText = "hello world";

document.body.appendChild(div);
  • 再新建一個(gè)html5標(biāo)準(zhǔn)格式的index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack從0到1</title>
</head>
<body>
    <script src="./src/index.js"></script>
</body>
</html>
  • 這樣我們基本的一個(gè)項(xiàng)目結(jié)構(gòu)及內(nèi)容就生成了,瀏覽器打開index.html文件也能顯示出"hello world"砍聊。
  webpack-demo/chapter1
  |- package.json
+ |- index.html
+ |- /src
+   |- index.js

3背稼、安裝webpack

  • 然后我們需要安裝下webpack,可以全局安裝也可以本地安裝玻蝌,我推薦本地安裝蟹肘,這樣可以避免與他人合作開發(fā)時(shí)由于webpack版本號(hào)不一致而導(dǎo)致的打包問題词疼。具體:官網(wǎng)webpack安裝
  • 如果你沒能綠色上網(wǎng)安裝很慢的話可以使用淘寶鏡像處理一下。
# 本地
$ npm install webpack webpack-cli --save-dev

# 全局
$ npm install webpack --global
  • --save-dev--save兩個(gè)有啥子區(qū)別呢帘腹?
    • 后綴那個(gè)--save-dev可以簡(jiǎn)寫為-D贰盗,這個(gè)會(huì)自動(dòng)把模塊和版本號(hào)添加到package.json中的devDependencies部分。
    • 還有一個(gè)后綴--save可以簡(jiǎn)寫為-S阳欲,這個(gè)會(huì)自動(dòng)把模塊和版本號(hào)添加到dependencies部分舵盈。

在安裝一個(gè)要打包到生產(chǎn)環(huán)境的安裝包時(shí),你應(yīng)該使用npm install --save球化,如果你在安裝一個(gè)用于開發(fā)環(huán)境的安裝包(例如秽晚,linter, 測(cè)試庫(kù)等),你應(yīng)該使用npm install --save-dev筒愚。請(qǐng)?jiān)?a target="_blank">npm文檔中查找更多信息爆惧。
—— 引用來自webpack官網(wǎng)教程的解釋。

還有我網(wǎng)上搜的另一個(gè)解釋我也覺得很直觀跋悄堋:
--save-dev是你開發(fā)時(shí)候依賴的東西扯再,--save是你發(fā)布之后還依賴的東西。
比如址遇,你寫ES6代碼熄阻,如果你想編譯成ES5發(fā)布那么babel就是devDependencies。如果你用了jQuery倔约,由于發(fā)布之后還是依賴jQuery秃殉,所以是dependencies
—— 引用segmentfaul提問

  • 安裝完了以后我么就可以看到package.json中多出的這幾行東西浸剩。
{
   ...
+  "devDependencies": {
+    "webpack": "^4.41.5",
+    "webpack-cli": "^3.3.10"
+  }
   ...
}

4钾军、打包js

(1)第一種方式--使用默認(rèn)打包的模式

  • 我們可以直接在命令行中輸入:
$ npx webpack

執(zhí)行npx webpack,會(huì)將我們的src/index.js作為入口文件绢要,然后會(huì)新建一個(gè)dist文件夾和dist/main.js作為輸出文件吏恭。
npx webpack簡(jiǎn)單一點(diǎn)來說就是會(huì)去找項(xiàng)目中本地的./node_modules/.bin/webpack,然后中執(zhí)行它重罪。

  • 這時(shí)我們就可以看到項(xiàng)目結(jié)構(gòu)下生成了一個(gè)dist文件夾和打包好的main.js文件了樱哼。

(2)第二種方式--使用配置文件打包

  • 刪掉dist目錄,在當(dāng)前目錄下新建一個(gè)webpack.config.js配置文件剿配。
  webpack-demo/chapter1
  |- package.json
  |- index.html
  |- /src
    |- index.js
+ |- webpack.config.js
  • 配置文件webpack.config.js中寫:
// 引入node中的path模塊
const path = require('path');

module.exports = {
  // 定義入口文件搅幅,告訴webpack我要打包啥
  entry: './src/index.js',
  // 定義輸出文件,告訴webpack打包好的文件叫啥呼胚,給我放到哪里
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
};
  • 打包茄唐,使用webpack-cli提供的命令行(這就是我們?yōu)槭裁匆惭bwebpack-cli的原因):
$ npx webpack --config webpack.config.js

(3)第三種方式--使用npm腳本

  • 上面使用webpack-cli命令打包的方式不夠簡(jiǎn)潔明了,一般我們會(huì)在package.json中的scripts中定義一條命令蝇更。
{
...
+  "scripts": {
+    "build": "webpack"
+   }
...
}
  • 打包沪编,這個(gè)大家應(yīng)該就很熟悉了呼盆,執(zhí)行這條命令跟上面使用一樣的效果,它會(huì)自動(dòng)的去找文件目錄下的webpack.config.js文件然后執(zhí)行它漾抬。
$ npm run build
  • 同樣宿亡,這時(shí)我們就可以看到項(xiàng)目結(jié)構(gòu)下生成了一個(gè)dist文件夾和打包好的main.js文件了常遂。

5纳令、最后

  • 這時(shí)src/index.js文件已經(jīng)通過webpack打包后輸出為dist/main.js了,這個(gè)時(shí)候我們還得引用它克胳,所以復(fù)制一份index.html文件到dist文件夾下平绩。
  webpack-demo/chapter1
  |- package.json
  |- /dist
+   |- index.html
    |- main.js
  |- index.html
  |- /src
    |- index.js
  • dist/index.html文件內(nèi)容改為:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack從0到1</title>
</head>
<body>
    - <script src="./src/index.js"></script>
    + <script src="main.js"></script>
</body>
</html>
  • 這時(shí)候我們?cè)跒g覽器中打開dist/index.html同樣也可以看到hello world在屏幕中顯示出來了,我們就簡(jiǎn)單了完成了一個(gè)js文件打包的過程漠另。

6捏雌、其他

參考鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笆搓,隨后出現(xiàn)的幾起案子性湿,更是在濱河造成了極大的恐慌,老刑警劉巖满败,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肤频,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡算墨,警方通過查閱死者的電腦和手機(jī)宵荒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來净嘀,“玉大人报咳,你說我怎么就攤上這事⊥诓兀” “怎么了暑刃?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)膜眠。 經(jīng)常有香客問我稍走,道長(zhǎng),這世上最難降的妖魔是什么柴底? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任婿脸,我火速辦了婚禮,結(jié)果婚禮上柄驻,老公的妹妹穿的比我還像新娘狐树。我一直安慰自己,他們只是感情好鸿脓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布抑钟。 她就那樣靜靜地躺著涯曲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪在塔。 梳的紋絲不亂的頭發(fā)上幻件,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音蛔溃,去河邊找鬼绰沥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贺待,可吹牛的內(nèi)容都是我干的徽曲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼麸塞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秃臣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哪工,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤奥此,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后雁比,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稚虎,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年章贞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祥绞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸭限,死狀恐怖蜕径,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情败京,我是刑警寧澤兜喻,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站赡麦,受9級(jí)特大地震影響朴皆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泛粹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一遂铡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晶姊,春花似錦扒接、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碱呼。三九已至,卻和暖如春宗侦,著一層夾襖步出監(jiān)牢的瞬間愚臀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工矾利, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姑裂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓梦皮,卻偏偏與公主長(zhǎng)得像炭分,于是被迫代替她去往敵國(guó)和親桃焕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剑肯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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