简介

webpack-dev-server 为你提供了一个基本的 web server,并且具有 live reloading(实时重新加载) 功能。

安装

npm install —save-dev webpack-dev-server

使用

修改配置文件,告知 dev server,从什么位置查找文件:webpack.config.js

  1. const path = require("path")
  2. const HtmlWebpackPulgin = require("html-webpack-plugin")
  3. module.exports = {
  4. mode: 'development',
  5. entry: './src/index.js',
  6. output: {
  7. filename: 'bundle.js',
  8. path: path.resolve(__dirname, './dist'),
  9. clean: true,
  10. },
  11. devtool: 'inline-source-map',
  12. plugins: [
  13. new HtmlWebpackPulgin({
  14. template: './index.html',
  15. filename: 'app.html',
  16. inject: 'body'
  17. })
  18. ],
  19. // webpack-dev-server 不输出任何的物理文件,而是把打包后的dist放到了内存里
  20. // 把dist删除后,我们源文件改变时,不仅还会继续更新,并且不会生成dist
  21. devServer: {
  22. // static配置告知 webpack-dev-server,将 dist 目录下的文件 serve 到 localhost:8080 下。
  23. static: './dist',
  24. // 模块热替换
  25. hot: true,
  26. },
  27. }

配置好 devServer 后,我们

npx webpack-dev-server

image.png
启动后如上图所示,我们点击http://localhost:8080/
image.png
会有这样的一个界面出现,这就是我们dist文件夹里面的内容,并且它是被放在了server(我们的电脑内存里)上,不会在我们的物理文件夹内生成。

官方文档的描述:

webpack-dev-server 在编译之后不会写入到任何输出文件。而是将 bundle 文件保留在内存中,然后将它们 serve 到 server 中,就好像它们是挂载在 server 根路径上的真实文件一样。如果你的页面希望在其他不同路径中找到 bundle 文件,则可以通过 dev server 配置中的 devMiddleware.publicPath 选项进行修改。

模块热替换:

这个功能可以让我们在修改代码保存后,不需要重新启动服务,也不需要刷新页面,直接就可以在页面上实现替换,这就和我们使用的 create-reacy-app 以及 vue-cli 一样,都不需要我们手动的刷新页面。

它允许在运行时更新所有类型的模块,而无需完全刷新。本页面重点介绍其实现,而 概念 页面提供了更多关于它的工作原理以及为什么它有用的细节。 此功能可以很大程度提高生产效率。我们要做的就是更新 webpack-dev-server 配置, 然后使用 webpack 内置的 HMR 插件。我们还要删除掉 print.js 的入口起点, 因为现在已经在 index.js 模块中引用了它。 从 webpack-dev-server v4.0.0 开始,热模块替换是默认开启的

总结

(1)devServer 可以让我们打包的文件不输出到我们的电脑上,而是把文件保留在内存里,然后serve到server上。
(2)模块的热更新可以让我们自动监测文件的变化,并且实习浏览器的自动刷新,大大提高了我们的开发效率。