详解webpack-dev-server的简单使用


Posted in Javascript onApril 02, 2018

webpack-dev-server

webpack-dev-server是一个小型的Node.js Express服务器,它使用webpack-dev-middleware来服务于webpack的包,除此自外,它还有一个通过Sock.js来连接到服务器的微型运行时.

我们来看一下下面的配置文件(webpack.config.js)

var path = require("path");
module.exports = {
 entry:{
 app:["./app/main.js"]
 },
 output:{
 path:path.resolve(__dirname,"build"),
 publicPath:"/assets/",
 filename:"bundle.js"
}
}

这里你将你的源文件放在app文件夹下,并通过webpack将其打包到build文件夹下的bundle.js中.

注意:webpack-dev-server是一个独立的NPM包,你可以通过npm install webpack-dev-server来安装它.

基本目录

webpack-dev-server默认会以当前目录为基本目录,除非你制定它.

webpack-dev-server --content-base build/

上述命令是在命令行中执行的,它将build目录作为根目录.有一点需要注意的是:webpack-dev-server生成的包并没有放在你的真实目录中,而是放在了内存中.

我们在基本目录下新建一个index.html文件,然后在浏览器中输入http://localhost:8080访问.

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <script src="assets/bundle.js"></script>
</body>
</html>

自动刷新

webpack-dev-server支持两种模式来自动刷新页面.

  1. iframe模式(页面放在iframe中,当发生改变时重载)
  2. inline模式(将webpack-dev-sever的客户端入口添加到包(bundle)中)

两种模式都支持热模块替换(Hot Module Replacement).热模块替换的好处是只替换更新的部分,而不是页面重载.

iframe模式
使用这种模式不需要额外的配置,只需要以下面这种URL格式访问即可

http://«host»:«port»/webpack-dev-server/«path»

例如:http://localhost:8080/webpack-dev-server/index.html.

inline模式

inline模式下我们访问的URL不用发生变化,启用这种模式分两种情况:

1 当以命令行启动webpack-dev-server时,需要做两点:

  1. 在命令行中添加--inline命令
  2. 在webpack.config.js中添加devServer:{inline:true}

2 当以Node.js API启动webpack-dev-server时,我们也需要做两点:

  1. 由于webpack-dev-server的配置中无inline选项,我们需要添加webpack-dev-server/client?http://«path»:«port»/到webpack配置的entry入口点中.
  2. 将<script src="http://localhost:8080/webpack-dev-server.js"></script>添加到html文件中
var config = require("./webpack.config.js");
 var webpack = require('webpack');
 var WebpackDevServer = require('webpack-dev-server');

config.entry.app.unshift("webpack-dev-server/client?http://localhost:8080/");

var compiler = webpack(config);
var server = new WebpackDevServer(compiler, {
 contentBase:'build/',
 publicPath: "/assets/"
});
server.listen(8080);

在Node中运行上面的代码即可。

注意:webpack配置中的devSever配置项只对在命令行模式有效。

(Hot Module Replacement)热模块替换

在命令行中运行inline模式,并启用热模块替换

这里只需要多增加 --hot指令就OK了.如下所示.

webpack-dev-server --content-base build --inline --hot

注意:命令行模式下,webpack.config.js中一定要配置output.publicPath来指定编译后的包(bundle)的访问位置.

在Nodejs API中运行inline模式,并启用热模块替换

这里需要做以下三点:

  1. 在webpack.config.js的entry选项中添加:webpack/hot/dev-server
  2. 在webpack.config.js的plugins选项中添加:new webpack.HotModuleReplacementPlugin()
  3. 在webpack-dev-server的配置中添加:hot:true

webpack-dev-server中的配置选项

var WebpackDevServer = require("webpack-dev-server");
var webpack = require("webpack");

var compiler = webpack({
 // configuration
});
var server = new WebpackDevServer(compiler, {
 // webpack-dev-server options

 contentBase: "/path/to/directory",
 // Can also be an array, or: contentBase: "http://localhost/",

 hot: true,
 // Enable special support for Hot Module Replacement
 // Page is no longer updated, but a "webpackHotUpdate" message is send to the content
 // Use "webpack/hot/dev-server" as additional module in your entry point
 // Note: this does _not_ add the `HotModuleReplacementPlugin` like the CLI option does. 

 // Set this as true if you want to access dev server from arbitrary url.
 // This is handy if you are using a html5 router.
 historyApiFallback: false,

 // Set this if you want to enable gzip compression for assets
 compress: true,

 // Set this if you want webpack-dev-server to delegate a single path to an arbitrary server.
 // Use "**" to proxy all paths to the specified server.
 // This is useful if you want to get rid of 'http://localhost:8080/' in script[src],
 // and has many other use cases (see https://github.com/webpack/webpack-dev-server/pull/127 ).
 proxy: {
 "**": "http://localhost:9090"
 },

 setup: function(app) {
 // Here you can access the Express app object and add your own custom middleware to it.
 // For example, to define custom handlers for some paths:
 // app.get('/some/path', function(req, res) {
 // res.json({ custom: 'response' });
 // });
 },

 // pass [static options](http://expressjs.com/en/4x/api.html#express.static) to inner express server
 staticOptions: {
 },

 // webpack-dev-middleware options
 quiet: false,
 noInfo: false,
 lazy: true,
 filename: "bundle.js",
 watchOptions: {
 aggregateTimeout: 300,
 poll: 1000
 },
 // It's a required option.
 publicPath: "/assets/",
 headers: { "X-Custom-Header": "yes" },
 stats: { colors: true }
});
server.listen(8080, "localhost", function() {});
// server.close();

参考:http://webpack.github.io/docs/webpack-dev-server.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript事件实例详解
Nov 06 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
Jun 22 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
js实现漂浮回顶部按钮实例
May 06 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
Nov 22 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
Oct 15 Javascript
实例讲解JavaScript截取字符串
Nov 30 Javascript
基于javascript的拖拽类封装详解
Apr 19 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 Javascript
webpack v4 从dev到prd的方法
Apr 02 #Javascript
vue axios登录请求拦截器
Apr 02 #Javascript
webpack+react+antd脚手架优化的方法
Apr 02 #Javascript
vue axios请求超时的正确处理方法
Apr 02 #Javascript
JavaScript 日期时间选择器一些小结
Apr 02 #Javascript
vue计算属性及使用详解
Apr 02 #Javascript
vue小白入门教程
Apr 02 #Javascript
You might like
php数组(array)输出的三种形式详解
2013/06/05 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
django使用admin站点上传图片的实例
2019/07/28 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
毕业生自荐书
2014/02/03 职场文书
分层教学实施方案
2014/03/19 职场文书
爱国口号
2014/06/19 职场文书
Python基础之条件语句详解
2021/06/16 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL