rollup-plugin-copy
 

Copy files and folders, with glob support.
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({
      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 (stringArray): Path or glob of what to copy
- dest (stringArray): One or more destinations where to copy
- 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.
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
})
copySync
Type: boolean | Default: false
Copy items synchronous.
copy({
  targets: [{ src: 'assets/*', dest: 'dist/public' }],
  copySync: true
})
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
Cédric Meuter
License
MIT