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 git+https://github.com/syJSdev/rollup-plugin-copy-merge.git -D # npm npm i git+https://github.com/syJSdev/rollup-plugin-copy-merge.git -D// 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 (
stringArray): Path or glob of what to copy - dest (
stringArray): One or more destinations where to copy - file (
string): destination file where to copy. all source files will merge into this file. should set dest or file. - rename (
stringFunction): 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.
Can merge using file attribute.
copy({ targets: [ { src: 'assets/js/*.js', file: 'dist/public/scripts1.js' }, { src: ['assets/umd/*.js', 'assets/iife/*.js'], file: 'dist/public/scripts2.js' } { src: ['assets/umd/index.js', 'assets/iife/index.js'], file: 'dist/public/scripts3.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) => `${name}-v1.${extension}` } ] })copy({ targets: [ { src: 'src/index.html', dest: 'dist/public', transform: (contents) => 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