Copy & Merge files and folders, with glob support. This plugin is extended rollup-plugin-copy plugin which support the merge functionality. Thanks #vladshcherbin
# yarn
yarn add rollup-plugin-copy-merge --dev
# npm
npm i rollup-plugin-copy-merge --save-dev
// rollup.config.js
import copy from 'rollup-plugin-copy-merge'
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' }
{ src: 'assets/js/*.js', file: 'dist/public/scripts.js' },
]
})
]
}
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 - file (
string
): destination file where to copy. all source files will merge into this file. (only supports for 'utf8' contents) - rename (
string
,Function
): Change destination file or folder name - transform (
Function
): Modify file contents (only supports for 'utf8' contents)
Each object should have dest or file, and src properties, rename and transform are optional. globby is used inside, check it for glob pattern examples.
Can merge using file
attribute.
copy({
targets: [{ src: 'assets/polyfill/*.js', file: 'dist/public/polyfill.js' }],
flatten: false
});
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, src_path) => `${name}-v1.${extension}`
}
]
});
copy({
targets: [
{
src: 'src/index.html',
dest: 'dist/public',
transform: (contents, src_file_name, src_path) =>
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: 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