Webpack自动化打包:webpack-dev-server配置与内存运行详解

作者:望舒

时间:2026-10-30

浏览:518

本文详细介绍webpack-dev-server插件的配置与使用,实现代码保存后自动打包并刷新浏览器。通过配置devServer对象,启用热模块替换(HMR)与内存运行模式,提升本地开发效率。文章涵盖安装、配置、命令执行及内存打包原理,帮助开发者摆脱手动打包步骤,优化前端开发工作流。

文章目录

在前面的章节中,每次修改资源文件或配置文件后,都需要手动输入npx webpack命令进行打包。那么,是否存在一种机制能够监听代码变更,并在保存时自动完成打包操作呢?

答案是肯定的。许多现代框架的脚手架正是利用这一机制实现保存即打包的功能。本章将重点介绍webpack-dev-server插件,它能够实现自动化打包。

一、什么是webpack-dev-server

Webpack Dev Server是基于Node.js构建的Web服务器。它能够在本地开发环境中启动一个实时Web服务器,自动编译代码并刷新浏览器,从而极大提升前端开发的便利性。

Webpack Dev Server支持热模块替换(HMR),允许在应用运行时更新模块而无需刷新整个页面。此外,它还提供了压缩、编译、转换、代码分离等特性。Webpack Dev Server通常用于搭建本地开发环境,而生产部署则需使用其他Web服务器。

二、在webpack中配置

1. 下载安装

npm i webpack-dev-server -D

2. 在webpack.config.js中配置使用

const path = require("path");
module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "js/main.js", // 将 js 文件输出到 static/js 目录中
  },
  module: {
    rules: [],
  },
  plugins: [],
  // 开发服务器
  devServer: {
    host: "localhost", // 启动服务器域名
    port: "3000", // 启动服务器端口号
    open: true, // 是否自动打开浏览器
  },
  mode: "development",
};

作为一个服务,devServer配置项与Webpack的五大核心配置属性处于同一层级。因此,我们需要在配置文件中新增devServer配置对象。

以下是完整的配置代码示例:

webpack.config.js

// Node.js的核心模块,专门用来处理文件路径
const path = require("path");
const ESLintWebpackPlugin = require("eslint-webpack-plugin"); // 引入 ESLint 插件
const HtmlWebpackPlugin = require("html-webpack-plugin"); // 引入 html-webpack-plugin 插件
module.exports = {
  // 入口
  // 相对路径和绝对路径都行
  entry: "./src/main.js",
  // 输出
  output: {
    // path: 文件输出目录,必须是绝对路径
    // path.resolve()方法返回一个绝对路径
    // __dirname 当前文件的文件夹绝对路径
    path: path.resolve(__dirname, "dist"),
    // filename: js文件输出文件名
    filename: "js/main.js",
    clean: true, // 自动将上次打包目录资源清空
  },
  // 加载器
  module: {
    rules: [
      {
        // 用来匹配 .css 结尾的文件
        test: /\.css$/,
        // use 数组里面 Loader 执行顺序是从右到左
        use: ["style-loader", "css-loader"],
      },
      {
        // 用来匹配.less结尾的文件
        test: /\.less$/,
        use: ["style-loader", "css-loader", "less-loader"],
      },
      {
        test: /\.s[ac]ss$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
      {
        // 用来匹配图片文件
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024, // 小于10kb的图片会被base64处理
          },
        },
        generator: {
          // 将图片文件输出到 images 目录中
          // 将图片文件命名 [hash:8][ext][query]
          // [hash:8]: hash值取8位
          // [ext]: 使用之前的文件扩展名
          // [query]: 添加之前的query参数
          filename: "images/[hash:8][ext][query]",
        },
      },
      {
        test: /\.(ttf|woff2?|map4|map3|avi)$/,
        type: "asset/resource", // 以文件资源的形式输出
        generator: {
          filename: "media/[hash:8][ext][query]", // 输出到media目录中
        },
      },
      {
        test: /\.m?js$/, // 转译哪些文件
        exclude: /(node_modules|bower_components)/, // 排除哪些文件夹中的js文件不用转译
        // use: {
        loader: 'babel-loader',
        //   options: {
        //     presets: ['@babel/preset-env'] // 添加预设,转译js文件
        //   }
        // }
      }
    ],
  },
  // 插件
  plugins: [
    new ESLintWebpackPlugin({
      // 指定检查文件的根目录
      context: path.resolve(__dirname, "src"),
    }),
    new HtmlWebpackPlugin({
        // 以 public/index.html 为模板创建文件
        // 新的html文件有两个特点:1. 内容和源文件一致 2. 自动引入打包生成的js等资源
        template: path.resolve(__dirname, "public/index.html"),
    }),
  ],
  // 开发服务器
  devServer: {
    host: "localhost", // 启动服务器域名
    port: "8888", // 启动服务器端口号
    open: true, // 是否自动打开浏览器
  },
  // 模式
  mode: "development", // 开发模式
};

3. 自动打包命令

npx webpack serve

一、什么是webpack-dev-server

一、什么是webpack-dev-server

如上图所示,执行命令后,webpack-dev-server会自动在本地启动服务,并在浏览器中运行打包好的资源文件。

4. 体验自动打包

接下来,我们尝试更改需要打包的资源文件并保存,以观察效果。更改保存前的状态如下:

一、什么是webpack-dev-server

一、什么是webpack-dev-server

更改保存后的状态如下:

一、什么是webpack-dev-server

一、什么是webpack-dev-server

可以看到,系统已自动完成打包并将结果运行在浏览器中。

至此,我们结束了在开发环境下手动运行打包后资源文件的时代,进一步解放了双手。

5. 内存运行

一、什么是webpack-dev-server

如图所示,我们清空dist目录下的所有文件,然后重新执行npx webpack serve进行打包。

一、什么是webpack-dev-server

一、什么是webpack-dev-server

一、什么是webpack-dev-server

可以看到打包成功,并重新运行到了浏览器,但dist目录依然是空的。这证明了一点,webpack-dev-server是在本地内存中运行的。这也是本地开发环境所期望的行为。至于如何生成dist目录,需要配置生产环境,这将在后续文章中更新。

到此这篇关于webpack自动化打包webpack-dev-server的实现的文章就介绍到这了,更多相关webpack自动化打包 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章