Webpack
中文文档:
开发环境 | webpack 中文文档
现阶段我们想要查看代码运行的结果只能通过npm run build
打包后,运行dist
文件夹下的index.html
才能看到效果。
我们怎么能让webpack
知道我们的代码有更新后自动编译呢?
1、watch
配置脚本:
// ...
"scripts": {
"build": "webpack",
"watch": "webpack --watch"
}
运行
watch
后,dist/index.html
文件会被删除
现在我们更改main.js
文件中的代码,就不需要手动执行npm run build
,这是因为Webpack
正在监视你的文件。
但是缺点是必须手动刷新浏览器才能看到更改。
2、webpack-dev-server(推荐)
安装:
npm install webpack-dev-server --save-dev
配置脚本命令:
// ...
"scripts": {
"watch": "webpack --watch",
"dev": "webpack serve",
"build": "webpack"
}
配置文件:
module.exports = {
devServer: {
contentBase: "./dist", // 从什么位置查找文件
open: true // 自动在浏览器打开
},
// ...
}
webpack-dev-server
不仅可以帮我们监听文件还可以帮我们自动刷新浏览器。
devServe.proxy
配置开发环境跨域:
DevServer | webpack 中文文档
3、webpack-dev-middleware
简单说middleware
就是让我们自己编写类似于webpack-dev-server
这样的监听器,webpack-dev-server
在内部使用了它,然而它也可以作为一个单独的package
来使用,以便根据需求进行更多自定义设置。
安装:
$ npm install express webpack-dev-middleware --save-dev
修改package.json
文件:
// ..
"scripts": {
"watch": "webpack --watch",
"dev": "webpack serve"
"middleware": "node server",
"build": "webpack"
}
修改webpack.config.js
文件:
module.exports = {
// ...
output: {
filename: '[name].js',
path: path.resolve(__dirname, "dist"),
publicPath: "/"
},
}
新建一个server.js
文件(和webpack.config.js
平级):
const express = require("express");
const webpack = require("webpack");
const webpackDevMiddleware = require("webpack-dev-middleware");
const config = require("./webpack.config"); // webpack 配置文件
const complier = webpack(config); // webpack()传入config后会返回一个编译器,编译器执行一次就会打包一次代码
const app = express();
app.use(webpackDevMiddleware, complier, {
publicPath: config.output.publicPath
});
app.listen(8080, () => {
console.log("程序已经启动");
})
这里涉及到Node.js
的知识。
运行npm run middleware
就会进行编译,如果想要做到webpack-dev-serve
那样的效果是需要配置很多的东西。