![](/img/trans.png)
[英]Write template to disk by HtmlWebpackPlugin when using webpack-dev-server
[英]Webpack: How to compile, write on disk and serve static content (js/css) using webpack-dev-server
我想构建我的 js/css 代码,将其写入磁盘并在单个命令中使用 webpack-dev-server 为其提供服务。 我不想为生产模式设置另一台服务器。 我们该怎么做呢? 在下面分享我的 webpack.config.js 文件内容:
module.exports = {
watch: true,
entry: [
'./src/index.js'
],
output: {
path: __dirname +'/dist/',
publicPath: '/dist/',
filename: 'bundle.js'
},
module: {
loaders: [
{
exclude:/(node_modules)/,
loader: 'babel',
query: {
presets: ['es2015', 'react']
}
}
]
},
devServer: {
historyApiFallback: true,
contentBase: './'
}
};
请在下面的 package.json 中找到使用的启动脚本:
"start": "webpack-dev-server --progress --colors"
我正在运行“npm run start”。 请帮忙。
新的 webpack-dev-server 发布,支持writeToDisk
选项。
devServer: {
writeToDisk: true
}
您可以将start
脚本定义更改为:
"start": "webpack --watch & webpack-dev-server --inline --progress --colors"
。
这会将 webpack watch-and-rebuild 过程发送到后台,以便您还可以在使用webpack-dev-server
更改修改后的模块时热重新加载它们。
编辑:
这些插件中的任何一个都可以满足您的需求:
webpack-dev-server 使用“虚拟”Express 服务器和 Sock.js 来模拟在您的机器上运行的服务器。 关于编译,webpack-dev-server 会在检测到代码更改时重新编译bundle
。 然而,这种重新编译是从内存中提供的,而不是项目的build
目录(或者,在您的情况下,是dist
目录)。 从文档:
使用此配置, webpack-dev-server 将在您的
build
文件夹中提供静态文件。 它将监视您的源文件,并在更改时重新编译包。
关于写入磁盘, webpack-dev-server 不会这样做。 上面写的内容部分解决了这一问题。 此外,请注意以下同样来自 Webpack 文档的内容:
这个修改后的包在
publicPath
指定的相对路径中从内存中publicPath
(请参阅 API)。 它不会写入您配置的output
目录。 如果捆绑已存在于同一 URL 路径中,则内存中的捆绑优先(默认情况下)。
要写入磁盘,请使用普通的 webpack 模块。 当然,正如您的问题所暗示的那样,每次更改后手动重新编译是乏味的。 为了解决这个麻烦,包括watch
标志。 从终端,您可以执行命令:
$ webpack --watch
但是,我更喜欢将其委托给 NPM 脚本。 请注意,下面的-w
标志等效于编写--watch
。
// NPM `scripts` field:
"watch": "webpack -w"
如果您想在运行 webpack-dev-server 的同时重新编译您的更改并写入您的输出目录,您可以添加一个额外的 NPM 脚本,如下所示:
"scripts": {
"serve": "npm run watch && npm run start",
"start": "webpack-dev-server --progress --colors",
"watch": "webpack -w"
}
然后,在您的终端中,只需执行$ npm run serve
即可完成此操作。
如果您对自动重新加载的额外便利感兴趣,可以通过在 Webpack 配置文件的 plugins 字段中定义以下内容来实现:
new webpack.HotModuleReplacementPlugin()
注意:这可能需要额外的 Babel 配置设置。 如果我是你,我会从你的 babel 加载器中取出query
字段,而是将你的 Babel 配置委托给外部.babelrc
文件。 与热重载兼容的好用程序可能如下所示:
{
"presets": ["env", "es2015", "react"],
"plugins": ["react-hot-loader/babel"]
}
附带说明一下,我创建了一个样板存储库,用于轻松启动具有我想要的结构的项目。 Webpack 配置可能特别感兴趣。 特别是,它采用 Webpack 2 并包括其他构建工具,如 Babel(用于转译)、ESLint(语法检查器)以及对 CSS/Sass 和各种其他文件格式的支持。
在webpack-dev-server v4.0.0+
,使用了devMiddleware :
devServer: {
devMiddleware: {
writeToDisk: true
}
}
webpack-dev-server 从内存中服务文件,你可以用webpack-simple-serve替换 webpack-dev-server ,它使用 webpack 的 watch 功能,将编译后的文件写入磁盘并使用serve-handler来服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.