如何使用 CopyWebpackPlugin 复制和重命名文件

How to copy and rename a file with CopyWebpackPlugin

作为构建过程的一部分,我已经使用 CopyWebpackPlugin 将一些文件从源复制到构建目录。 在复制的同时我还想更改一些文件名。 例如从 test.tsx.snaptest.js.snap。 从文档中看起来这应该是可能的,因为他们有 path parameters for the templates 但目前还不清楚。 我想对文件目录执行此操作,因此也需要通配符。

目前这不起作用:

const config = {
  plugins: [
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, './test/snapshots/[name].tsx.[ext]'),
        to: path.resolve(__dirname, './test/snapshots/[name].js.[ext]')
      }
    ])
  ]
}

您可以使用 test option 捕获 RegEx 组,然后您可以在 to 中使用它们。

[
  new CopyWebpackPlugin([
    {
      from: path.resolve(__dirname, './test/snapshots/*.tsx.*'),
      to: '[2].js.[ext]',
      test: /(.+\/)?(.+)\.tsx\.snap/
    }
  ], options)
]

我可能有点晚了,但我认为可能更简单的解决方案是使用 toType 选项指定 'to' 选项是一个模板

const config = {
  plugins: [
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, './test/snapshots'),
        to: path.resolve(__dirname, './test/snapshots/[name].js.[ext]'),
        toType: 'template',
      }
    ])
  ]
}

// webpack.config.js

{
  plugins: [
      new CopyWebpackPlugin({
      patterns: [
        {
          from: './sample/dir',
          to: ({ absoluteFilename }) => {
            // FILENAME_REGEX is a regex that matches the file you are looking for...
            const { fileName } = absoluteFilename.match({ FILENAME_REGEX });
            return `destination/dir/changeFileName(fileName).yaml`
          },
        },
      ],
    }),
  ]
}