vladshcherbin/rollup-plugin-copy(opens in a new tab)
Language: TypeScript
Copy files and folders using Rollup
- stars
- 283
- watchers
- 3
- forks
- 60
- open issues
- 26
- Last updated
- 12/29/2025
Language: TypeScript
Copy files and folders using Rollup
Copy files and folders, with glob support.
# pnpm pnpm add rollup-plugin-copy -D # yarn yarn add rollup-plugin-copy -D # npm npm install rollup-plugin-copy -D
// rollup.config.js import copy from 'rollup-plugin-copy' export default { input: 'src/index.js', output: { file: 'dist/app.js', format: 'cjs' }, plugins: [ copy({ targets: [ { src: 'src/index.html', dest: 'dist/public' }, { src: ['assets/fonts/arial.woff', 'assets/fonts/arial.woff2'], dest: 'dist/public/fonts' }, { src: 'assets/images/**/*', dest: 'dist/public/images' } ] }) ] }
There are some useful options:
Type: Array | Default: []
Array of targets to copy. A target is an object with properties:
string Array): Path or glob of what to copystring Array): One or more destinations where to copystring Function): Change destination file or folder nameFunction): Modify file contentsEach object should have src and dest properties, rename and transform are optional. globby is used inside, check it for glob pattern examples.
copy({ targets: [{ src: 'src/index.html', dest: 'dist/public' }] })
copy({ targets: [{ src: 'assets/images', dest: 'dist/public' }] })
copy({ targets: [{ src: 'assets/*', dest: 'dist/public' }] })
copy({ targets: [{ src: ['src/index.html', 'src/styles.css', 'assets/images'], dest: 'dist/public' }] })
copy({ targets: [{ src: ['assets/images/**/*', '!**/*.gif'], dest: 'dist/public/images' }] })
copy({ targets: [ { src: 'src/index.html', dest: 'dist/public' }, { src: 'assets/images/**/*', dest: 'dist/public/images' } ] })
copy({ targets: [{ src: 'src/index.html', dest: ['dist/public', 'build/public'] }] })
copy({ targets: [{ src: 'src/app.html', dest: 'dist/public', rename: 'index.html' }] })
copy({ targets: [{ src: 'assets/docs/*', dest: 'dist/public/docs', rename: (name, extension, fullPath) => `${name}-v1.${extension}` }] })
copy({ targets: [{ src: 'src/index.html', dest: 'dist/public', transform: (contents, filename) => contents.toString().replace('__SCRIPT__', 'app.js') }] })
Type: boolean | Default: false
Output copied items to console.
copy({ targets: [{ src: 'assets/*', dest: 'dist/public' }], verbose: true })
Type: string | Default: buildEnd
Rollup hook the plugin should use. By default, plugin runs when rollup has finished bundling, before bundle is written to disk.
copy({ targets: [{ src: 'assets/*', dest: 'dist/public' }], hook: 'writeBundle' })
Type: boolean | Default: false
Copy items once. Useful in watch mode.
copy({ targets: [{ src: 'assets/*', dest: 'dist/public' }], copyOnce: true })
Type: boolean | Default: false
Copy items synchronous.
copy({ targets: [{ src: 'assets/*', dest: 'dist/public' }], copySync: true })
Type: boolean | Default: true
Remove the directory structure of copied files.
copy({ targets: [{ src: 'assets/**/*', dest: 'dist/public' }], flatten: false })
All other options are passed to packages, used inside:
MIT