webpack4实践笔记18 webpack-dev-server (开发模式)
本系列代码放在 github 上:
webpack4系列实践代码如果本系列实践教程对你有帮助,欢迎给个
github star
哦!
1.development vs production
development 模式:
在开发环境中,我们希望能够更加方便的进行开发以及调试代码,当项目运行起来后,可以自动打开浏览器,webpack 能够通过监听代码的修改,自动重新编译打包,并且实时刷新浏览器。
production 模式:
在生产模式中,我们希望能够得到一个更小的 bundle,更轻量的 source >map,从而改善加载时间。
如果没有设置 mode
,webpack 默认以 production
模式进行打包。
2.webpack-dev-server
webpack-dev-server 是 webpack 官方提供的一个小型 Express 服务器。
通过配置它可以在开发模式下为 webpack 打包生成的静态资源文件启动一个 web 服务器,并检测代码的变化进行实时更新。
注意:webpack-dev-server只能工作于
development
模式。
webpack4提供了一个 devServer
的选项,来配置 webpack-dev-server
。
devServer 的配置项挺多的,详见文档:https://www.webpackjs.com/configuration/dev-server/
- contentBase: 设置静态资源的路径,默认是当前工作目录。
- hot: 设置热更新功能,实现不刷新浏览器就能对修改到的模块进行热更新。
- open: devServer 自动打开浏览器
overlay: 配置当 webpack 编译警告或出错时,是否在浏览器显示
1
2
3
4
5
6overlay: true // 显示错误
或
overlay: {
warnings: true, // 显示警告
errors: true // 显示错误
}- port: 指定要监听请求的端口号
proxy: devServer 是一个基于 express 的后端服务,在后端中是没有跨域的限制的(因为跨域是浏览器的行为),因此,通过这个代理,浏览器就不会出现跨域的问题了。比如通过如下配置把 /api 代理到 http://xxx.xxx.xxx.xxx/api
1
2
3proxy: {
"/api": "http://xxx.xxx.xxx.xxx/api"
}historyApiFallback: 当使用 HTML5 History API 时,默认情况下任意的 404 响应都被替换为 index.html。
可以通过如下修改配置
1
2
3
4
5
6
7historyApiFallback: {
rewrites: [
{ from: /^\/$/, to: '/views/landing.html' },
{ from: /^\/subpage/, to: '/views/subpage.html' },
{ from: /./, to: '/views/404.html' }
]
}
3.安装相关依赖
注意: webpack-dev-server 依赖于 webpack 和 webpack-cli,所以需要在本地安装 webpack 和 webpack-cli。
1 | npm install -D webpack-dev-server |
4.目录结构
1 | // `--` 代表目录, `-` 代表文件 |
src/assets/fonts/icomoon.css1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37@font-face {
font-family: "icomoon";
src: url("./icomoon.eot?nn7hff");
src: url("./icomoon.eot?nn7hff#iefix") format("embedded-opentype"),
url("./icomoon.ttf?nn7hff") format("truetype"),
url("./icomoon.woff?nn7hff") format("woff"),
url("./icomoon.svg?nn7hff#icomoon") format("svg");
font-weight: normal;
font-style: normal;
}
[class^="icon-"],
[class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: "icomoon" !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-wechat:before {
content: "\e900";
color: #7bb32e;
}
.icon-github:before {
content: "\e902";
}
.icon-envelop:before {
content: "\e945";
}
src/assets/styles/app.css1
2
3
4
5
6
7
8
9
10
11.icons-box {
width: 500px;
height: 100px;
margin: auto;
margin-top: 180px;
}
.icons-box i {
font-size: 100px;
margin-left: 20px;
}
src/app.js
1 | import "./assets/fonts/icomoon.css"; |
5.编写webpack配置文件
webpack.config.js
1 | const path = require("path"); |
6.修改package.json
package.json 添加 script 脚本1
2
3"scripts": {
"dev": "webpack-dev-server --open"
},
7.执行打包命令
1 | npm run dev |
运行成功后,会自动打开浏览器并显示 index.html 页面,修改 css 或 js 代码后,浏览器会自动刷新。
8.源码地址
demo 代码地址: https://github.com/SimpleCodeCX/simple-webpack-demos/tree/master/demo18-devServer
仓库代码地址(及目录): https://github.com/SimpleCodeCX/simple-webpack-demos
本文作者 : Simple
原文链接 : https://simplecodecx.github.io/blog/20190311/f1f1f195.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!