@Dale-Lin
2022-03-24T20:45:28.000000Z
字数 1286
阅读 289
webpack5
每次编译代码时手动运行 webpack
命令很麻烦,使用以下某种方式来在代码更新后自构建。
多数浏览器场景下使用
webpack-dev-server
;watch mode 在调试 npm 包之类只需要关心构建结果的场景更好用。
webpack --watch
命令在构建完成后不退出,而是继续 watch 文件。
缺点是浏览器不会自动刷新;可以使用 webpack-dev-server
来实现浏览器自动刷新。
webpack-dev-server 提供了一个初级的(rudimentary)web 服务器和实时重载能力(默认配置并没有 HMR)。设置方式:
yarn add webpack-dev-server -D
// webpack.config.js
module.exports = {
devServer: {
static: './dist' // 把 dist 目录的资源作为服务器的可访问文件
}
}
webpack-dev-server 的默认端口是
8080
,并根据webpack.config.js
的output
配置为服务提供 bundle 文件,即可以通过http://[devServer.host]:[devServer.port]
/[output.publicPath]/[output.filename]
访问。webpack-dev-server 不在编译后做任何写入,而是把 bundle 文件保留在内存中,然后为对应的服务地址提供响应。可以通过 dev server 配置项的
devMiddleware.publicPath
修改本地的服务路径。
webpack-dev-middleware 是一个将 webpack 处理后的文件发送到服务的中间件,webpack-dev-server 内部使用了它。
在需要自定义服务器(例如使用 express、koa 起本地 node 服务)提供 web 服务时可以使用。
用例:
yarn add express webpack-dev-middleware -D
// server.js
const express = require('express')
const webpack = require('webpack')
const webpackDevMiddleware = require('webpack-dev-middleware')
const config = require('./webpack.config.js')
const app = express()
const compiler = webpack(config)
app.use(
webpackDevMiddleware(compiler, {
publicPath: config.output.publicPath
})
)
app.listen(17777, () => {
console.log('Serving on port 17777!\n')
})