@jonathanmoore/rollup-plugin-copy v3.5.1
rollup-plugin-copy
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.
Installation
# yarn
yarn add rollup-plugin-copy -D
# npm
npm install rollup-plugin-copy -D
Usage
// 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' }
]
})
]
}
Configuration
There are some useful options:
targets
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.
File
copy({
targets: [{ src: 'src/index.html', dest: 'dist/public' }]
})
Folder
copy({
targets: [{ src: 'assets/images', dest: 'dist/public' }]
})
Glob
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }]
})
Glob: multiple items
copy({
targets: [{ src: ['src/index.html', 'src/styles.css', 'assets/images'], dest: 'dist/public' }]
})
Glob: negated patterns
copy({
targets: [{ src: ['assets/images/**/*', '!**/*.gif'], dest: 'dist/public/images' }]
})
Multiple targets
copy({
targets: [
{ src: 'src/index.html', dest: 'dist/public' },
{ src: 'assets/images/**/*', dest: 'dist/public/images' }
]
})
Multiple destinations
copy({
targets: [{ src: 'src/index.html', dest: ['dist/public', 'build/public'] }]
})
Rename with a string
copy({
targets: [{ src: 'src/app.html', dest: 'dist/public', rename: 'index.html' }]
})
Rename with a function
copy({
targets: [{
src: 'assets/docs/*',
dest: 'dist/public/docs',
rename: (name, extension, fullPath) => `${name}-v1.${extension}`
}]
})
Transform file contents
copy({
targets: [{
src: 'src/index.html',
dest: 'dist/public',
transform: (contents, filename) => contents.toString().replace('__SCRIPT__', 'app.js')
}]
})
verbose
Type: boolean
| Default: false
Output copied items to console.
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }],
verbose: true
})
hook
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'
})
copyOnce
Type: boolean
| Default: false
Copy items once. Useful in watch mode.
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }],
copyOnce: true
})
watch
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.
flatten
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:
Original Author
License
MIT