程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 构建工具

    • 初识 Webpack
    • Webpack 配置详解
    • Webpack 打包发布
      • 1. Webpack 综合配置文件
      • 2. package.json 配置
      • 3. 脚本命令解析
        • 1. 启动开发服务器
        • 2. 打包项目
        • 3. 开发模式下启动服务器
        • 4. 生产模式下打包项目
    • 在 Vue 项目中配置 Webpack
    • 在 Vue 项目中配置 Vite
  • 构建工具
  • 构建工具
scholar
2024-07-29
目录

Webpack 打包发布

在本小节中,我们将详细讲解如何配置 Webpack 以进行项目的开发、打包和发布。我们将通过配置 webpack.config.js 文件和 package.json 文件来管理这些过程。

# 1. Webpack 综合配置文件

我们需要一个 webpack.config.js 文件来定义项目的基本配置,在项目根目录下创建一个名为 webpack.config.js 的文件。

// 引入 Node.js 的路径模块,用于处理和转换文件路径
const path = require('path');
// 引入 html-webpack-plugin 插件
const HTMLPlugin = require('html-webpack-plugin');

module.exports = {
  // 配置 webpack 的打包模式
  mode: 'production', // 也可以是 'development' 或 'none'

  // 配置入口文件,即 webpack 开始构建依赖图的文件
  entry: './src/index.js',

  // 配置输出文件,即打包后的文件存放位置
  output: {
    // 指定打包后的文件存放目录,使用 path.resolve 将相对路径转换为绝对路径
    path: path.resolve(__dirname, 'dist'),
    // 指定打包后的文件名
    filename: 'bundle.js',
    // 自动清理打包目录,只保留当前这次打包的文件
    clean: true
  },

  // 配置模块处理规则
  module: {
    rules: [
      {
        // 匹配所有以 .css 结尾的文件
        test: /\.css$/i,
        // 使用的 loader,先使用 css-loader 解析 CSS 文件,然后使用 style-loader 将 CSS 插入到 DOM 中
        use: ['style-loader', 'css-loader']
      },
      {
        // 匹配所有以 .ts 结尾的文件
        test: /\.ts$/,
        // 使用 ts-loader 处理 02.TypeScript 文件
        use: 'ts-loader'
      },
      {
        // 匹配所有以 .jpg、.png 或 .gif 结尾的文件
        test: /\.(jpg|png|gif)$/i,
        // 使用 asset/resource 类型加载图像资源
        type: 'asset/resource'
      },
      {
        // 匹配 .js 或 .mjs 文件
        test: /\.m?js$/,
        // 排除 node_modules 和 bower_components 目录
        exclude: /(node_modules|bower_components)/,
        // 使用 babel-loader
        use: {
          loader: 'babel-loader',
          options: {
            // 使用 @babel/preset-env 预设进行转换
            presets: ['@babel/preset-env']
          }
        }
      }
    ]
  },

  // 配置插件
  plugins: [
    new HTMLPlugin({
      // 设置 HTML 页面的 title
      title: 'Hello Webpack',
      // 指定 HTML 模板文件路径,自动引入打包后的 JS 脚本
      template: './src/index.html'
    })
  ],

  // 配置源码映射,方便调试打包后的代码
  devtool: 'inline-source-map',

  // 配置开发服务器
  devServer: {
    // 配置代理,用于解决跨域请求问题
    proxy: {
      '/api1': {
        target: 'http://localhost:5000', // 代理目标的基础路径
        changeOrigin: true, // 控制请求头中的 host 值
        pathRewrite: {'^/api1': ''}, // 重写路径,利用正则替换请求前缀
        ws: true // 用于支持 websocket
      },
      '/api2': {
        target: 'http://localhost:5001', // 代理目标的基础路径
        changeOrigin: true, // 控制请求头中的 host 值
        pathRewrite: {'^/api2': ''} // 重写路径,利用正则替换请求前缀
      }
    },
    // 设置开发服务器的端口号
    port: 3000,
    // 在服务器启动后自动打开浏览器
    open: true
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

# 2. package.json 配置

在 package.json 文件中,我们可以定义一些脚本来简化命令的运行,例如启动开发服务器和打包项目。

在项目根目录下创建一个名为 package.json 的文件,并添加以下内容:






 
 
 
 
 
 

















{
  "name": "my-project", // 项目名称
  "version": "1.0.0", // 项目版本
  "description": "A project configured with Webpack", // 项目描述
  "main": "index.js", // 项目主入口文件
  "scripts": {
    "start": "webpack serve --config webpack.config.js", // 启动开发服务器,使用 webpack.config.js 配置文件
    "build": "webpack --config webpack.config.js", // 打包项目,使用 webpack.config.js 配置文件
    "dev": "webpack serve --config webpack.config.js --mode development", // 启动开发服务器,使用开发模式和 webpack.config.js 配置文件
    "prod": "webpack --config webpack.config.js --mode production" // 打包项目,使用生产模式和 webpack.config.js 配置文件
  },
  "author": "", // 项目作者
  "license": "ISC", // 项目许可证
  "devDependencies": { // 开发依赖
    "@babel/core": "^7.14.6", // Babel 核心库
    "@babel/preset-env": "^7.14.5", // Babel 预设,用于将现代 JavaScript 转换为兼容的旧版本 JavaScript
    "babel-loader": "^8.2.2", // Webpack 的 Babel 加载器
    "css-loader": "^5.2.6", // Webpack 的 CSS 加载器
    "html-webpack-plugin": "^5.3.1", // 生成 HTML 文件并自动引入打包后的资源的插件
    "style-loader": "^2.0.0", // 将 CSS 注入到 DOM 中的加载器
    "ts-loader": "^9.2.2", // Webpack 的 02.TypeScript 加载器
    "typescript": "^4.3.5", // 02.TypeScript 编译器
    "webpack": "^5.38.1", // Webpack 核心库
    "webpack-cli": "^4.7.2", // Webpack 的命令行工具
    "webpack-dev-server": "^3.11.2" // Webpack 开发服务器
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 3. 脚本命令解析

# 1. 启动开发服务器

"start": "webpack serve --config webpack.config.js"
1
  • webpack:运行 Webpack 命令。
  • serve:使用 webpack-dev-server 启动开发服务器。
  • --config webpack.config.js:指定 Webpack 的配置文件路径。这里明确告诉 Webpack 使用项目根目录下的 webpack.config.js 文件。

作用:

  • 启动 Webpack 开发服务器。
  • 自动监听文件变动并进行实时编译。
  • 提供热模块替换(HMR)功能,实时刷新浏览器以展示最新的代码更改。
  • 开发服务器启动后,会自动打开浏览器并访问 http://localhost:3000(基于 webpack.config.js 文件中的配置)。

# 2. 打包项目

"build": "webpack --config webpack.config.js"
1
  • webpack:运行 Webpack 命令。
  • --config webpack.config.js:指定 Webpack 的配置文件路径。

作用:

  • 使用 Webpack 按照 webpack.config.js 文件中的配置打包项目。
  • 打包后的文件会输出到配置文件中指定的 dist 目录中。
  • 适用于生产环境下的代码打包。

# 3. 开发模式下启动服务器

"dev": "webpack serve --config webpack.config.js --mode development"
1
  • webpack:运行 Webpack 命令。
  • serve:使用 webpack-dev-server 启动开发服务器。
  • --config webpack.config.js:指定 Webpack 的配置文件路径。
  • --mode development:指定 Webpack 的模式为开发模式。

作用:

  • 启动 Webpack 开发服务器,并使用开发模式进行配置。
  • 开发模式下,构建速度更快,并启用了更多的调试功能,如 source map 和模块热替换(HMR)。
  • 开发服务器启动后,会自动打开浏览器并访问 http://localhost:3000(基于 webpack.config.js 文件中的配置)。
  • 适用于日常开发过程中的调试和开发操作。

# 4. 生产模式下打包项目

"prod": "webpack --config webpack.config.js --mode production"
1
  • webpack:运行 Webpack 命令。
  • --config webpack.config.js:指定 Webpack 的配置文件路径。
  • --mode production:指定 Webpack 的模式为生产模式。

作用

  • 使用 Webpack 按照 webpack.config.js 文件中的配置打包项目,并使用生产模式进行优化。
  • 生产模式下,会进行代码压缩和其他优化措施,以提高代码的性能和加载速度。
  • 打包后的文件会输出到配置文件中指定的 dist 目录中。
  • 适用于将代码发布到生产环境之前的打包操作。
编辑此页 (opens new window)
上次更新: 2025/01/05, 02:09:04
Webpack 配置详解
在 Vue 项目中配置 Webpack

← Webpack 配置详解 在 Vue 项目中配置 Webpack→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式