CC 4.0 协议声明

    本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。

    以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。

    CopyRspackPlugin

    Rspack only

    将已存在的单个文件或整个目录复制到产物目录。

    new rspack.CopyRspackPlugin(options);
    • options

      • 类型:
      export type CopyRspackPluginOptions = {
        patterns: (
          | string // 如果传入字符串,会被视作 { from: `你传入的字符串` }
          | {
              from: string;
              to?:
                | string
                | ((pathData: {
                    context: string;
                    absoluteFilename?: string;
                  }) => string); // 默认根据 from 推断
              context?: string; // 默认 Rspack 配置中的 context
              toType?: 'dir' | 'file' | 'template'; // 默认根据 from 推断
              noErrorOnMissing?: boolean; // 默认 false
              force?: boolean; // 默认 false
              priority?: number; // 默认 0
              globOptions?: {
                caseSensitiveMatch?: boolean; // 默认 true
                dot?: boolean; // 默认 true
                ignore?: string[]; // 忽略特定路径
              };
              transform?: (
                input: Buffer,
                absoluteFilename: string,
              ) => string | Buffer | Promise<string> | Promise<Buffer>;
            }
        )[];
      };
      • 默认值: undefined
      名称类型默认值描述
      fromstringundefined复制的源路径,可以是绝对路径、相对路径、glob 查询字符串,可以是文件或目录。若传入相对路径,则是相对于 context 配置。
      tostring | ((pathData: { context: string; absoluteFilename?: string }) => string)undefined复制的输出路径,可以是绝对路径、相对路径或者是 Rspack 的模版字符串,例如 '[name].[hash][ext]'。当不指定 to 时,则相当于是产物目录。
      contextstringundefined该配置决定怎样匹配 from 路径,以及复制后的结构。
      toType'dir'|'file'|'template'undefined指定 to 的类型,可以是目录,文件或 Rspack 的模版名,若不指定则会自动推断。
      noErrorOnMissingbooleanfalse当没有找到对应的文件或目录时,忽略错误。
      forcebooleanfalse当产物中已经有相应的文件时,是否覆写。
      prioritynumber0当设置 forcetrue 时,如果匹配到同样的文件,优先级高的会覆写优先级的。
      globOptionsobjectundefinedglob 查询选项,caseSensitiveMatch 决定是否大小写敏感,dot 决定是否匹配以 . 开头的文件,ignore 是 glob 形式的字符串数组,可以使用该配置忽略部分特定路径。
      transformfunctionundefined允许修改文件内容。

    示例:

    rspack.config.js
    const rspack = require('@rspack/core');
    module.exports = {
      entry: './src/index.js',
      plugins: [
        new rspack.CopyRspackPlugin({
          patterns: [
            {
              from: 'file.txt',
            },
          ],
        }),
      ],
    };

    以上面的配置运行结果会是:"dist/file.txt"

    rspack.config.js
    module.exports = {
      entry: './src/index.js',
      plugins: [
        new rspack.CopyRspackPlugin({
          patterns: [
            {
              from: 'directory',
            },
          ],
        }),
      ],
    };

    以上面的配置运行结果会是 directory 目录下的所有文件平铺在产物目录中。

    rspack.config.js
    module.exports = {
      entry: './src/index.js',
      plugins: [
        new rspack.CopyRspackPlugin({
          patterns: [
            {
              from: 'directory/**/*',
              to: 'newdirectory',
            },
          ],
        }),
      ],
    };

    以上面的配置运行结果会是 directory 目录被移动到产物目录中的 newdirectory 目录,例如 dist/newdirectory/directory/foo