跳到正文

复制文件

copy 选项用于将静态文件和目录复制到构建输出中。它适合处理不需要经过打包器转换、但需要随包一起发布的资源,例如图片、字体和许可证文件。

使用 CLI

将目录传给 --copy,即可把它复制到输出目录:

bash
tsdown --copy public

outDir 使用默认值 dist 时,public/favicon.svg 会被复制到 dist/public/favicon.svg

使用配置文件

最简单的配置是一个路径或 glob 模式:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  copy: 'public',
})

您可以在数组中指定多个路径、glob 模式或对象配置:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  copy: [
    'LICENSE',
    {
      from: ['public/**/*', '!public/**/*.map'],
      to: 'dist/assets',
      flatten: false,
    },
  ],
})

glob 模式支持使用 ! 前缀进行排除。在此示例中,public 下的文件会复制到 dist/assets 并保留相对目录结构,同时排除源映射文件。

NOTE

相对的源路径和目标路径都基于项目根目录(cwd)解析,而不是基于 outDir

对象选项

对象配置支持以下属性:

属性类型默认值说明
fromstring | string[]必填源路径或 glob 模式。数组中可以包含否定模式。
tostringoutDir目标路径,基于项目根目录解析。
flattenbooleantrue将匹配的文件直接放入 to。设为 false 时,会保留第一个路径段之后的目录结构。
renamestring | ((name, extension, fullPath) => string)修改目标名称。回调接收不带前导点的扩展名和绝对路径。
verbosebooleanfalse记录每个复制操作的源路径和目标路径。

保留目录结构

默认情况下,glob 匹配到的文件会被直接放入目标目录。设置 flatten: false 可以保留其相对目录结构:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  copy: {
    from: 'assets/**/*',
    to: 'dist/public',
    flatten: false,
  },
})

例如,assets/fonts/inter.woff2 会被复制到 dist/public/fonts/inter.woff2

重命名复制项

使用字符串或回调可以重命名复制项:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  copy: [
    {
      from: 'src/file.txt',
      to: 'dist',
      rename: 'file.md',
    },
    {
      from: 'src/file.txt',
      to: 'dist',
      rename: (name, extension) => `${name}-renamed.${extension}`,
    },
  ],
})

此配置会生成 dist/file.mddist/file-renamed.txt

动态配置

copy 也可以是同步或异步回调。回调接收解析后的 tsdown 配置,并返回相同的字符串、对象或数组形式:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  copy: ({ outDir }) => ({
    from: ['assets/**/*', '!assets/**/*.map'],
    to: `${outDir}/assets`,
    flatten: false,
  }),
})

构建和监听行为

复制操作会在打包输出生成后运行,静态文件不会经过 Rolldown 转换。对于多格式构建,顶层 copy 选项只运行一次;特定格式的覆盖配置可以为该格式再次定义 copy

在监听模式下,匹配到的源文件会被作为构建依赖进行监听。文件发生变化时会触发重新构建,并再次复制当前文件。

Released under the MIT License.