使用webpack創(chuàng)建單頁(yè)應(yīng)用

1.webpack簡(jiǎn)介

webpack 是一個(gè)用于現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包工具村生。當(dāng) webpack 處理應(yīng)用程序時(shí)拉讯,它會(huì)在內(nèi)部構(gòu)建一個(gè)依賴圖(dependency graph)罢杉,此依賴圖對(duì)應(yīng)映射到項(xiàng)目所需的每個(gè)模塊齐邦,并生成一個(gè)或多個(gè) bundle锰蓬。

2.核心概念

  • 入口(entry):指示 webpack 應(yīng)該使用哪個(gè)模塊锣险,來(lái)作為構(gòu)建其內(nèi)部依賴圖(dependency graph) 的開(kāi)始
  • 輸出(output):告訴 webpack 在哪里輸出它所創(chuàng)建的 bundle,以及如何命名這些文件
  • loader:webpack 只能理解 JavaScript 和 JSON 文件栽渴,loader讓 webpack 能夠去處理其他類型的文件尖坤,如:css,sass闲擦,image
  • 插件(plugin):loader 用于轉(zhuǎn)換某些類型的模塊慢味,而插件則可以用于執(zhí)行范圍更廣的任務(wù)。包括:打包優(yōu)化墅冷,資源管理纯路,注入環(huán)境變量
  • 模式(mode):通過(guò)選擇 development, production 或 none 之中的一個(gè),來(lái)設(shè)置 mode 參數(shù)寞忿,以便針對(duì)不同環(huán)境進(jìn)行優(yōu)化
  • 瀏覽器兼容性(browser compatibility):webpack 支持所有符合 ES5 標(biāo)準(zhǔn) 的瀏覽器(不支持 IE8 及以下版本)

3. 安裝

如果使用 webpack v4+ 版本驰唬,除webpack自身外,還需要安裝 CLI(webpack cli)

全局安裝
npm install --global webpack

本地安裝
npm install --save-dev webpack webpack-cli

4.創(chuàng)建項(xiàng)目

mkdir demo-webpack && cd demo-webpack
npm init -y
npm install webpack webpack-cli --save-dev

4.1目錄結(jié)構(gòu)

目錄結(jié)構(gòu)如下:

  • src 項(xiàng)目文件
    • js
    • images
    • css
    • index.html
  • package.json 包管理文件

4.2 下載需要的loader(css,image,es6)

由于webpack只能處理js和json文件腔彰,不能處理css和image叫编,所以我們得先在webpack.config.js添加處理html,css和image的loader

  • html-loader 處理html文件的img圖片(負(fù)責(zé)引入img,<img src="image.png"> 變?yōu)?const img = require('./image.png') 或者 import img from "./image.png""霹抛,使其能被url-loader/file-loader處理)
  • css-loader 處理css文件
  • style-loader 處理css樣式
  • url-loader 處理圖片(同時(shí)需要安裝file-loader搓逾,以便處理大圖片 )
npm install --save-dev html-loader css-loader style-loader url-loader file-loader

如果頁(yè)面中的js用到es6語(yǔ)法,需要使用babel先進(jìn)行解析

npm install --save-dev babel-loader @babel/core @babel/preset-env 

4.3 下載需要的插件

  • html-webpack-plugin 復(fù)制html模板杯拐,并自動(dòng)插入打包好的文件
  • clean-webpack-plugin 清空dist目錄下文件
npm install --save-dev html-webpack-plugin clean-webpack-plugin 

4.4 配置webpack

由于我們要區(qū)分開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境霞篡,所以使用兩個(gè)不同的配置文件,配置文件統(tǒng)一放在build文件下
結(jié)構(gòu)如下:

  • build 配置文件存儲(chǔ)目錄
    • webpack.common.js 公共配置文件
    • webpack.prod.js 生產(chǎn)環(huán)境配置文件
    • webpack.dev.js 開(kāi)發(fā)環(huán)境公共配置文件

由于我們把公共部分分開(kāi)了端逼,所以需要合并配置朗兵,此時(shí)需要安裝webpack-merge息裸,配置好后在開(kāi)發(fā)環(huán)境需要啟動(dòng)服務(wù)姐刁,所以還要安裝webpack-dev-serve

npm install --save-dev webpack-merge

具體配置信息見(jiàn):配置文件信息,配置中有詳細(xì)的介紹

5.整體項(xiàng)目目錄如下

  • build 配置文件存儲(chǔ)目錄
    • webpack.common.js 公共配置文件
    • webpack.prod.js 生產(chǎn)環(huán)境配置文件
    • webpack.dev.js 開(kāi)發(fā)環(huán)境公共配置文件
  • src 項(xiàng)目文件
    • js
    • images
    • css
    • index.html
  • package.json 包管理文件

6.多頁(yè)面應(yīng)用

目前該項(xiàng)目只有一個(gè)頁(yè)面,如果是多個(gè)頁(yè)面禀崖,需要在入口配置多個(gè)入口礁鲁,同時(shí)使用html-webpack-plugin配置多頁(yè)面盐欺,如:

entry: {
    main: './src/index.js',
    about: './src/about.js'
}

plugins: [
    new HtmlWebpackPlugin(
        {
            template:'./src/index.html'
            title: 'demo-webpack',
            filename: 'index.html',
            chunks: ['index','vendors']  //index為入口文件js名稱,vendors為屬性splitChunks-cacheGroups-vendor-name的值
        }
    ),
    new HtmlWebpackPlugin(
        {
            template:'./src/about.html'
            title: '關(guān)于我們',
            filename: 'about.html',
            chunks: ['about']
        }
    ),
]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末救氯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歌憨,更是在濱河造成了極大的恐慌着憨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件务嫡,死亡現(xiàn)場(chǎng)離奇詭異甲抖,居然都是意外死亡漆改,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門准谚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挫剑,“玉大人,你說(shuō)我怎么就攤上這事柱衔》疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵唆铐,是天一觀的道長(zhǎng)哲戚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)艾岂,這世上最難降的妖魔是什么顺少? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮王浴,結(jié)果婚禮上脆炎,老公的妹妹穿的比我還像新娘。我一直安慰自己氓辣,他們只是感情好秒裕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著筛婉,像睡著了一般簇爆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爽撒,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天入蛆,我揣著相機(jī)與錄音,去河邊找鬼硕勿。 笑死哨毁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的源武。 我是一名探鬼主播扼褪,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粱栖!你這毒婦竟也來(lái)了话浇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤闹究,失蹤者是張志新(化名)和其女友劉穎幔崖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赏寇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年吉嫩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗅定。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡自娩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渠退,到底是詐尸還是另有隱情忙迁,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布智什,位于F島的核電站动漾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荠锭。R本人自食惡果不足惜旱眯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望证九。 院中可真熱鬧删豺,春花似錦、人聲如沸愧怜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拥坛。三九已至蓬蝶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猜惋,已是汗流浹背丸氛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留著摔,地道東北人缓窜。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谍咆,于是被迫代替她去往敵國(guó)和親禾锤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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