Webpack Development

Development

本部分內(nèi)容,會(huì)涉及到三種開發(fā)工具舞虱。
需要注意的是气嫁,不要再產(chǎn)品發(fā)布環(huán)境下使用這些工具

設(shè)置編輯器

一些編輯器默認(rèn)會(huì)開啟safe write模式,開啟這種模式后冗疮,保存文件后不會(huì)同步進(jìn)行編譯萄唇。
常用編輯器的配置。

  • Sublime Text 3
    Add "atomic_save": false to your user preferences.
  • IntelliJ
    use search in the preferences to find "safe write" and disable it.
  • Vim
    add :set backupcopy=yes in your settings.
  • WebStorm
    uncheck Use "safe write" in Preferences > Appearance & Behavior > System Settings

Source Maps

當(dāng)js拋出異常時(shí)术幔,需要定位產(chǎn)生問題的代碼另萤。由于webpack打包后會(huì)將代碼打包到一個(gè)或多個(gè)bundle文件,所以是沒辦法直接定位到產(chǎn)生問題的代碼的诅挑。

Source Maps就是為了解決該問題的四敞。關(guān)于Source Map的配置參數(shù)有很多詳細(xì)配置,每個(gè)配置都有對(duì)應(yīng)的優(yōu)勢(shì)和劣勢(shì)拔妥。
通過下面的方式進(jìn)行source map的配置
devtool: "cheap-eval-source-map"

Choosing a Tool

webpack提供watch mode,基于這種模式忿危,webpack會(huì)監(jiān)控文件,并在文件改變的時(shí)候進(jìn)行重新編譯没龙。webpack-dev-server提供方便的開發(fā)server實(shí)現(xiàn)實(shí)時(shí)刷新(live reload).
如果你已經(jīng)有了開發(fā)的部署server癌蚁,可以使用webpack-dev-middle,從而讓開發(fā)構(gòu)建更靈活兜畸。

webpack-dev-server努释,webpack-dev-middleware會(huì)將打包后的代碼保存在內(nèi)存中,
不會(huì)將文件寫到磁盤咬摇。這樣會(huì)讓編譯更快并且不會(huì)在本地磁盤創(chuàng)建很多編譯調(diào)試過程中的無用文件伐蒂。
大部分場(chǎng)景都可以使用webpack-dev-server,因?yàn)檫@種方式更簡(jiǎn)單,是一種開箱即用的工具肛鹏。

webpack Watch Mode

webpack watch mode會(huì)檢測(cè)文件的改變逸邦。如果檢測(cè)到了文件變化,會(huì)自動(dòng)再次進(jìn)行編譯在扰。
使用下面的命令缕减,可以在編譯打印出比較直觀的進(jìn)度
webpack --progress --watch
Wathch mode不會(huì)假定使用何種server,所以需要自己添加server芒珠。
為了簡(jiǎn)單可以使用serve,執(zhí)行'npm bin'/serve
可以創(chuàng)建一個(gè)server桥狡,來負(fù)責(zé)響應(yīng)請(qǐng)求。

注意,使用serve做為服務(wù)器裹芝,當(dāng)改變文件部逮,自動(dòng)重新編譯后,是不會(huì)重新自動(dòng)刷新界面的嫂易。

Watch Mode with Chrome DevTools Workspaces

如果在chrome中設(shè)置了persist changes when saving from the Sources panel兄朋,那就不需要手動(dòng)刷新頁(yè)面了。
需要做如下設(shè)置

devtool: "inline-source-map"

使用chrome workspace watch模式會(huì)有一些限制:

  • 大文件(超過1M)在重新編譯的時(shí)候怜械,頁(yè)面會(huì)變成空白頁(yè)颅和,需要手動(dòng)刷新頁(yè)面。
  • 小文件會(huì)比大文件編譯快缕允,因?yàn)?code>inline-source-map將原文件做base64編譯的速度會(huì)比較慢峡扩。

webpack-dev-server

webpack-dev-server提供了帶自動(dòng)刷新功能的server服務(wù)器。
首先需要確定有index.html文件引用了bundle.js文件灼芭。
假設(shè)output.filenamebundle.js

<script src="/bundle.js"></script>

通過npm安裝webpack-dev-server

npm install webpack-dev-server --save-dev

安裝完成后啟動(dòng)

webpack-dev-server --open

上面的命令會(huì)默認(rèn)打開瀏覽器訪問http://localhost:8080
通過使用webpack-dev-server有了live reload的能力有额。
更深入的可以使用Hot Module Replacement.
該接口可以用來在不刷新頁(yè)面的情況下切換module般又。更多內(nèi)容參考config HMR

默認(rèn)情況下webpack-dev-server使用inline mode.該模式會(huì)想bundle.js中注入用來實(shí)時(shí)刷新及顯示編譯錯(cuò)誤的代碼彼绷。使用inline mode將會(huì)在DevTools命令行中看到構(gòu)建錯(cuò)誤及警告。

webpack-dev-server可以做更多事情茴迁,比如將請(qǐng)求代理到后臺(tái)服務(wù)器寄悯,更多配置參數(shù)參考devServer配置

webpack-dev-middleware

webpack-dev-middleware適用于機(jī)遇鏈接的middleware stacks。
該middleware在已有Node.js server或想完全控制server的場(chǎng)景下用處很大堕义。
該middleware會(huì)將webpack的編譯文件存放于內(nèi)存中猜旬。當(dāng)webpack處于編譯期時(shí),
將會(huì)延遲請(qǐng)求倦卖,在編譯結(jié)束后會(huì)執(zhí)行該請(qǐng)求洒擦,返回對(duì)應(yīng)內(nèi)容。

該middleware主要提供給高級(jí)用戶使用怕膛,簡(jiǎn)單使用推薦使用webpack-dev-server

使用npm對(duì)該middleware進(jìn)行安裝熟嫩。
npm install express webpack-dev-middleware --save-dev
安裝之后可以如下使用該middleware

var express = require("express");
var webpackDevMiddleware = require("webpack-dev-middleware");
var webpack = require("webpack");
var webpackConfig = require("./webpack.config");

var app = express();
var compiler = webpack(webpackConfig);

app.use(webpackDevMiddleware(compiler, {
  publicPath: "/" // Same as `output.publicPath` in most cases.
}));

app.listen(3000, function () {
  console.log("Listening on port 3000!");
});

執(zhí)行上面的代碼,根據(jù)output.publicPathoutput.filename中的配置褐捻,就可以進(jìn)行訪問掸茅。http://localhost:3000/bundle.js

默認(rèn)情況下,webpack-dev-middleware會(huì)使用watch mode柠逞。
也可以指定使用lazy mode.使用lazy mode僅僅會(huì)對(duì)請(qǐng)求的文件進(jìn)行重新編譯昧狮。
設(shè)置lazy mode。

app.use(webpackDevMiddleware(compiler, {
  lazy: true,
  filename: "bundle.js" // Same as `output.filename` in most cases.
}));

更多的內(nèi)容參考dev server

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末板壮,一起剝皮案震驚了整個(gè)濱河市逗鸣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖慕购,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聊疲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡沪悲,警方通過查閱死者的電腦和手機(jī)获洲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殿如,“玉大人贡珊,你說我怎么就攤上這事∩婺伲” “怎么了门岔?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)烤送。 經(jīng)常有香客問我寒随,道長(zhǎng),這世上最難降的妖魔是什么帮坚? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任妻往,我火速辦了婚禮,結(jié)果婚禮上试和,老公的妹妹穿的比我還像新娘讯泣。我一直安慰自己,他們只是感情好阅悍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布好渠。 她就那樣靜靜地躺著,像睡著了一般节视。 火紅的嫁衣襯著肌膚如雪拳锚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天寻行,我揣著相機(jī)與錄音霍掺,去河邊找鬼。 笑死寡痰,一個(gè)胖子當(dāng)著我的面吹牛抗楔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拦坠,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼连躏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了贞滨?” 一聲冷哼從身側(cè)響起入热,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤拍棕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后勺良,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绰播,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年尚困,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蠢箩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡事甜,死狀恐怖谬泌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逻谦,我是刑警寧澤掌实,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站邦马,受9級(jí)特大地震影響贱鼻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滋将,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一邻悬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耕渴,春花似錦拘悦、人聲如沸齿兔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)分苇。三九已至添诉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間医寿,已是汗流浹背栏赴。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靖秩,地道東北人须眷。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沟突,于是被迫代替她去往敵國(guó)和親花颗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 在現(xiàn)在的前端開發(fā)中惠拭,前后端分離扩劝、模塊化開發(fā)、版本控制、文件合并與壓縮棒呛、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,433評(píng)論 1 32
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺聂示,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,147評(píng)論 7 35
  • wepack-hot-middleware 深入解讀 webpack-hot-middleware 做什么的簇秒?we...
    前端大飛閱讀 10,383評(píng)論 1 14
  • 這個(gè)圖片是我為 @請(qǐng)叫我總共二號(hào) 的人的小說 〖刺客美人〗手繪畫的鱼喉,另外用了 [掃描全能王] 軟件掃描成電腦繪制的...
    歡樂的Joy閱讀 826評(píng)論 5 1
  • 眼光
    子木童閱讀 154評(píng)論 2 2