Webpack 同时输出压缩与未压缩文件的三种方案

作者:望舒时间:2026-10-23 19:17:05浏览:437

本文介绍在 Webpack 构建库文件时,如何同时输出压缩版与未压缩版代码的三种方法。包括通过环境变量切换、使用 unminified-webpack-plugin 插件以及配置多入口结合 Terser 插件。重点解析第三种方案,解决未压缩文件缺少 SourceMap 的问题,提供完整的配置代码与关键参数说明。

Webpack 同时输出压缩与未压缩文件的方案

在构建库(lib)包时,通常希望同时提供压缩后的代码用于 CDN 分发,以及未压缩的代码便于调试。实现这一需求有多种方式,最简单的方法是利用环境变量进行控制,例如设置 MINIFY 变量,具体配置如下:

方案一:环境变量控制


const path = require('path')

const isMinify = process.env.MINIFY

/**
 * @type {import('webpack').Configuration}
 */
const config = {
 entry: {

  index: './src/index.js'
 },
 output: {
  filename: isMinify ? '[name].min.js' : '[name].js',
  path: path.join(__dirname, 'dist')
 },
 devtool: 'cheap-source-map',
 optimization: {
  minimize: isMinify ? true : false
 }
}

module.exports = config

在构建脚本中,通过指定不同的环境变量来执行打包命令,从而生成不同版本的产物:


 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "build:min": "MINIFY=1 webpack --config=webpack.config.js",
  "build": "webpack --config=webpack.config.js"
 }

这种方法的局限性在于,需要手动执行两次构建命令,操作较为繁琐。

另一种方案是安装 unminified-webpack-plugin 插件,该插件可以自动生成未压缩的文件版本:

方案二:使用 unminified-webpack-plugin


const path = require('path')
const UnminifiedWebpackPlugin = require('unminified-webpack-plugin');

/**
 * @type {import('webpack').Configuration}
 */
const config = {
 entry: {
  index: './src/index.js',
 },
 output: {
  filename: '[name].min.js',
  path: path.join(__dirname, 'dist')
 },
 devtool: 'cheap-source-map',
 plugins: [
  new UnminifiedWebpackPlugin({})
 ]
}

module.exports = config

然而,此方法存在一个明显缺陷:生成的未压缩文件不包含 SourceMap 源映射信息。

第三种方法是通过配置多个打包入口,并手动指定压缩插件(如 uglifyjs 或 terser)仅对特定文件进行压缩。例如,若希望仅压缩 index.min.js 文件,配置方式如下:

方案三:多入口与 Terser 插件配置


const path = require('path')
const TerserWebpackPlugin = require('terser-webpack-plugin');

/**
 * @type {import('webpack').Configuration}
 */
const config = {
 entry: {
  index: './src/index.js',
  'index.min': './src/index.js'
 },
 output: {
  filename: '[name].js',
  path: path.join(__dirname, 'dist')
 },
 devtool: 'cheap-source-map',
 optimization: {
  minimize: true,
  minimizer: [
   new TerserWebpackPlugin({
    include: /min/,
    sourceMap: true
   })
  ]
 }
}

module.exports = config

该方案的关键配置点包括:

Webpack 同时输出压缩与未压缩文件的方案

采用此配置后,生成的产物将同时包含压缩版与带有 SourceMap 的未压缩版,效果理想。

以上介绍了 Webpack 同时输出压缩和未压缩文件的几种实现方式,更多相关内容可参考本站过往文章或继续浏览后续教程,感谢支持。

作者最新文章