初識 webpack

1. 初始化項目

首先,讓我們用命令行創(chuàng)建一個名為 webapp 的項目文件夾雇锡,初始化 npm搁痛,本地安裝 webpack

// 命令行 輸入:
mkdir webapp && cd webapp
npm init -y
npm install --save-dev webpack

如果你是初次接觸 npm和命令行工具逼侦,建議看看我的這篇 npm 應(yīng)用基礎(chǔ)匿辩。

運行了上述命令以后,在你本地的 webapp 項目文件夾創(chuàng)建一個包含 index.js 文件的 src(source的縮寫)文件夾榛丢,和一個包含 index.html 文件的 dist(distribution的縮寫)的文件夾铲球。顧名思義, src 文件夾中放置我們的源代碼晰赞, dist 文件夾是我們發(fā)布的項目文件夾稼病。這時候你 webapp 文件夾應(yīng)該包含如下文件:

// webapp 文件夾目錄結(jié)構(gòu):
   webapp
   |- package.json
   |- /src
     |- index.js
   |- /dist
     |- index.html

編寫 index.html 文件內(nèi)容如下:

// index.html 內(nèi)容:
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script src="bundle.js"></script>  <!-- 這個 bundle.js 將要使用webpack生成 -->
</body>
</html>

現(xiàn)在如果打開這個網(wǎng)頁,會報錯找不到 bundle.js 文件掖鱼。不用擔(dān)心然走,我們接下來就用 webpack 命令行生成這個文件。

2. 生成主 js 文件

首先戏挡,我們要編寫 index.js 文件內(nèi)容如下:

// index.js 內(nèi)容:
import _ from 'lodash';    // webpack 支持多種模塊引用語法芍瑞,包括CommonJs,AMD以及ES6褐墅。我推薦使用ES6語法拆檬,以后我會寫文章專門解釋他們的區(qū)別。

function component() {
    var element = document.createElement('div');
    element.innerHTML = _.join( ['Hello', 'webpack'], ' ' );
    return element;
}

document.body.appendChild( component() );

可以看到妥凳,我們的項目入口 js 文件是 index.js竟贯,它引用了 lodash 模塊,所以在生成主 js 文件前逝钥,我們需要安裝 lodash 依賴:

// 命令行 輸入:
npm install --save lodash 

安裝完成后屑那,package.json 文件中的出一個 dependencies 的對象,該對象包含一個 lodash 屬性艘款。

可能細心的你注意到了齐莲,我們安裝 webpack 的時候用了 --save-dev 選項,但是安裝lodash的時候用了--save選項磷箕。并且选酗,在package.json 文件中,webpacklodash 也分別出現(xiàn)在了 devDependenciesdependencies 對象中岳枷。這里的--save表示保存為依賴(dependency)芒填,依賴項就是運行我們的項目所必須的模塊,而-save-dev表示保存為開發(fā)依賴(development dependency)空繁,是我們開發(fā)的時候所必須的模塊殿衰,但并不是運行項目或者在生產(chǎn)環(huán)境下必須的模塊。兩者一個顯著的特征區(qū)別就是當(dāng)我們在命令行執(zhí)行npm install時盛泡,npm 只會幫我們安裝 dependencies 對象中的依賴模塊闷祥。

然后我們可以通過命令行將 index.js 連同依賴的 lodash 一起打包成一個名為 bundle.js 的主文件:

// 命令行 輸入:
./node_modules/.bin/webpack  src/index.js  dist/bundle.js

好吧,我承認這是一個蹩腳的寫法。并且windows下路徑連接符還需要用\凯砍。
但是箱硕,我們成功地使用 webpack 生成了一個 bundle.js 文件,并且我們在瀏覽器打開 index.html 文件悟衩,可以看到“Hello webpack”剧罩。下面我要講解如何簡單地配置 webpack 使我們可以簡化上述命令。

3. 簡單配置 webpack

在我們的項目文件夾下創(chuàng)建一個 webpack.config.js 文件座泳,如下:

// webapp 文件夾目錄結(jié)構(gòu):
   webapp
   |- package.json
*  |- webpack.config.js
   |- /src
     |- index.js
   |- /dist
     |- index.html
     |- bundle.js

并按照如下代碼編輯 webpack.config.js 文件:

// webpack.config.js 內(nèi)容:
const path = require('path');   // path是node內(nèi)置的模塊

module.exports = {
  entry: './src/index.js',      // 入口文件的相對路徑
  output: {                     // 輸出
    filename: 'bundle.js',                    // 文件名
    path: path.resolve(__dirname, 'dist')     // 文件所在目錄的絕對路徑
  }
};

這時候我們只需在命令行內(nèi)輸入:

// 命令行 輸入:
// Linux, Mac 下:
./node_modules/.bin/webpack
// 或者 windows:
.\node_modules\.bin\webpack

就能生成 bundle.js 文件惠昔。如果我們還想進一步簡化該命令,我們就需要修改 package.json 文件的 “scripts” 對象了挑势。

4. 配置 package.json 的 scripts

package.jsonscripts 對象負責(zé)存放我們自定義的命令行命令镇防,該對象的每個屬性對應(yīng)了一個命令,屬性名為我們在npm run后面輸入的命令的名稱潮饱,屬性值為這個命令来氧。因此,我們可以這樣修改 package.json

// package.json 內(nèi)容:
{
  ...
  "scripts": {
    "build": "webpack"    //這里不用再寫安裝路徑了
  },
  ...
}

注意在 scripts 對象里饼齿,我們可以訪問本地安裝的 npm 包饲漾,而不用再寫這些包的安裝路徑了。所以缕溉,最終我們輸入如下命令就能完成我們的工作了:

// 命令行 輸入:
npm run build
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末考传,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子证鸥,更是在濱河造成了極大的恐慌僚楞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枉层,死亡現(xiàn)場離奇詭異泉褐,居然都是意外死亡,警方通過查閱死者的電腦和手機鸟蜡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門膜赃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揉忘,你說我怎么就攤上這事跳座。” “怎么了泣矛?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵疲眷,是天一觀的道長。 經(jīng)常有香客問我您朽,道長狂丝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮几颜,結(jié)果婚禮上倍试,老公的妹妹穿的比我還像新娘。我一直安慰自己菠剩,他們只是感情好易猫,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布耻煤。 她就那樣靜靜地躺著具壮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哈蝇。 梳的紋絲不亂的頭發(fā)上棺妓,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音炮赦,去河邊找鬼怜跑。 笑死,一個胖子當(dāng)著我的面吹牛吠勘,可吹牛的內(nèi)容都是我干的性芬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剧防,長吁一口氣:“原來是場噩夢啊……” “哼植锉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峭拘,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤俊庇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸡挠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辉饱,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年拣展,在試婚紗的時候發(fā)現(xiàn)自己被綠了彭沼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡备埃,死狀恐怖姓惑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓜喇,我是刑警寧澤挺益,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站乘寒,受9級特大地震影響望众,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一烂翰、第九天 我趴在偏房一處隱蔽的房頂上張望夯缺。 院中可真熱鬧,春花似錦甘耿、人聲如沸踊兜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捏境。三九已至,卻和暖如春毁葱,著一層夾襖步出監(jiān)牢的瞬間垫言,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工倾剿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留筷频,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓前痘,卻偏偏與公主長得像凛捏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芹缔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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