Webpack Development

Development

本部分内容,会涉及到三种开发工具。
需要注意的是,不要再产品发布环境下使用这些工具

设置编辑器

一些编辑器默认会开启safe write模式,开启这种模式后,保存文件后不会同步进行编译。
常用编辑器的配置。

  • 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

当js抛出异常时,需要定位产生问题的代码。由于webpack打包后会将代码打包到一个或多个bundle文件,所以是没办法直接定位到产生问题的代码的。

Source Maps就是为了解决该问题的。关于Source Map的配置参数有很多详细配置,每个配置都有对应的优势和劣势。
通过下面的方式进行source map的配置
devtool: "cheap-eval-source-map"

Choosing a Tool

webpack提供watch mode,基于这种模式,webpack会监控文件,并在文件改变的时候进行重新编译。webpack-dev-server提供方便的开发server实现实时刷新(live reload).
如果你已经有了开发的部署server,可以使用webpack-dev-middle,从而让开发构建更灵活。

webpack-dev-serverwebpack-dev-middleware会将打包后的代码保存在内存中,
不会将文件写到磁盘。这样会让编译更快并且不会在本地磁盘创建很多编译调试过程中的无用文件。
大部分场景都可以使用webpack-dev-server,因为这种方式更简单,是一种开箱即用的工具。

webpack Watch Mode

webpack watch mode会检测文件的改变。如果检测到了文件变化,会自动再次进行编译。
使用下面的命令,可以在编译打印出比较直观的进度
webpack --progress --watch
Wathch mode不会假定使用何种server,所以需要自己添加server。
为了简单可以使用serve,执行'npm bin'/serve
可以创建一个server,来负责响应请求。

注意,使用serve做为服务器,当改变文件,自动重新编译后,是不会重新自动刷新界面的。

Watch Mode with Chrome DevTools Workspaces

如果在chrome中设置了persist changes when saving from the Sources panel,那就不需要手动刷新页面了。
需要做如下设置

devtool: "inline-source-map"

使用chrome workspace watch模式会有一些限制:

  • 大文件(超过1M)在重新编译的时候,页面会变成空白页,需要手动刷新页面。
  • 小文件会比大文件编译快,因为inline-source-map将原文件做base64编译的速度会比较慢。

webpack-dev-server

webpack-dev-server提供了带自动刷新功能的server服务器。
首先需要确定有index.html文件引用了bundle.js文件。
假设output.filenamebundle.js

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

通过npm安装webpack-dev-server

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

安装完成后启动

webpack-dev-server --open

上面的命令会默认打开浏览器访问http://localhost:8080
通过使用webpack-dev-server有了live reload的能力。
更深入的可以使用Hot Module Replacement.
该接口可以用来在不刷新页面的情况下切换module。更多内容参考config HMR

默认情况下webpack-dev-server使用inline mode.该模式会想bundle.js中注入用来实时刷新及显示编译错误的代码。使用inline mode将会在DevTools命令行中看到构建错误及警告。

webpack-dev-server可以做更多事情,比如将请求代理到后台服务器,更多配置参数参考devServer配置

webpack-dev-middleware

webpack-dev-middleware适用于机遇链接的middleware stacks。
该middleware在已有Node.js server或想完全控制server的场景下用处很大。
该middleware会将webpack的编译文件存放于内存中。当webpack处于编译期时,
将会延迟请求,在编译结束后会执行该请求,返回对应内容。

该middleware主要提供给高级用户使用,简单使用推荐使用webpack-dev-server

使用npm对该middleware进行安装。
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!");
});

执行上面的代码,根据output.publicPathoutput.filename中的配置,就可以进行访问。http://localhost:3000/bundle.js

默认情况下,webpack-dev-middleware会使用watch mode
也可以指定使用lazy mode.使用lazy mode仅仅会对请求的文件进行重新编译。
设置lazy mode。

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

更多的内容参考dev server

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341

推荐阅读更多精彩内容

  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,422评论 1 32
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,130评论 7 35
  • wepack-hot-middleware 深入解读 webpack-hot-middleware 做什么的?we...
    前端大飞阅读 10,343评论 1 14
  • 这个图片是我为 @请叫我总共二号 的人的小说 〖刺客美人〗手绘画的,另外用了 [扫描全能王] 软件扫描成电脑绘制的...
    欢乐的Joy阅读 817评论 5 1
  • 眼光
    子木童阅读 153评论 2 2