Copy files and folders, with glob support and the ability to watch files for changes. Forked from the original plugin (vladshcherbin/rollup-plugin-copy) to add in the watch capabilities.
# 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({
// Array of globs and directories to watch for changes
watch: ['src/**/*.html', 'assets/fonts/', 'assets/images/'],
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:
- src (
string
Array
): Path or glob of what to copy - dest (
string
Array
): One or more destinations where to copy - rename (
string
Function
): Change destination file or folder name - transform (
Function
): Modify file contents
Each 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: Array
| Default: []
Paths (string or array of strings). Paths to files, dirs to be watched recursively, or glob patterns.
Passed directly to chokidar as an array of directory that should be watched. When used with Rollupjs' watch mode the plugin will only copy individual files that have changed.
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