webpack:详解CopyWebpackPlugin,复制的同时修改文件内容

摘要

CopyWebpackPlugin 是一个强大的 Webpack 插件,用于将文件从源目录复制到构建目录。在本文中,我们将探讨 CopyWebpackPlugin 的一些常用 API,并提供示例代码。

在构建 Web 应用程序时,通常需要将一些静态文件(如 HTML、CSS、图片等)从源目录复制到构建目录。为了实现这一功能,我们可以使用 CopyWebpackPlugin。这个插件可以将源文件复制到构建目录,并且可以自定义复制行为。

常用 API

  1. patterns:一个数组,包含要复制的源文件和目标文件的信息。每个数组元素都是一个对象,其中包含以下属性:
  • from:源文件路径或模式。可以是字符串或正则表达式。
  • to:目标文件路径。可以是字符串或函数。
  • toType:目标文件类型。可以是 'file' 或 'dir'。默认值是 'file'。
  • flatten:是否将源文件复制到目标文件的子目录中。默认值是 false。
  • transform:一个函数,用于在复制文件之前对源文件进行转换。
  1. options:一个对象,包含一些全局选项,如 concurrency(并发复制的文件数)和 overwrite(是否覆盖已存在的文件)。
  2. filter:

示例

下面是一个简单的 CopyWebpackPlugin 配置示例:

javascript 复制代码
const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
  plugins: [
    new CopyPlugin({
      patterns: [{
          from: 'src/index.html',
          to: 'dist/index.html'
        },
        {
          from: 'src/assets',
          to: 'dist/assets'
        },
        {
          from: 'src/images',
          to: 'dist/images',
          toType: 'dir'
        },
        {
          from: 'src/styles.css',
          to: 'dist/styles.css',
          transform: (content, path) => minifyCSS(content)
        },
        {
          from: '**/*',
          to: './',
          globOptions: {
            ignore: ['**/*.js', '**/*.scss', '**/*.ts']
          }
        },
        {
          from: "public/**/*",
          filter: async (resourcePath) => {
            const data = await fs.promises.readFile(resourcePath);
            const content = data.toString();

            if (content === "my-custom-content") {
              return false;
            }

            return true;
          },
        },
      ],
      options: {
        concurrency: 10,
        overwrite: true
      }
    })
  ]
};

在这个示例中,我们创建了一个 CopyWebpackPlugin 实例,并指定了要复制的文件和目录。第一个模式将 src/index.html 文件复制到 dist/index.html 文件,第二个模式将 src/assets 目录复制到 dist/assets 目录,第三个模式将 src/images 目录复制到 dist/images 目录,第四个模式将 src/styles.css 文件复制到 dist/styles.css 文件,并在复制之前对内容进行转换(例如,压缩 CSS)。我们还指定了一些全局选项,如并发复制的文件数和是否覆盖已存在的文件。

文档

npmjs.com/package/copy-webpack-plugin

相关推荐
IPIPD4 分钟前
Node.js请求遇到503怎么重试?先解析Retry-After,再做有上限退避
前端
葡萄城技术团队11 分钟前
dsh-spreadjs-editor 的集成链路:把 SpreadJS Designer 嵌进 Agent 工作台
前端
FlyWIHTSKY1 小时前
vue2和vue3有什么区别,用法上有哪些区别
前端·javascript·vue.js
码云之上1 小时前
10 颗一模一样的「Edit」:中后台 Web Agent 怎么找到对的那一行
前端·人工智能·浏览器
量化分析码农2 小时前
【Python量化多因子实战 04】因子暴露不是 alpha:市值与行业中性化实战
前端·后端
不可能片场2 小时前
Electron 发布 正文写入的三条通道与读回口径
前端·electron
jerrywus2 小时前
让 AI 帮你部署 Vercel,报错了也不用手动搬日志
前端·agent·mcp
补码缩写2 小时前
11 行 Python 拆 PNG 块,解压后的字节数能手算
前端
coding漫漫长路2 小时前
PNG压缩先看图是哪一类,先无损再量化多半白做
前端
用户257680763212 小时前
搜「洗牙」为什么搜不到「洁治」
前端