1.0.2 • Published 1 year ago

rollup-plugin-copy-merge v1.0.2

Weekly downloads
5
License
MIT
Repository
github
Last release
1 year ago

rollup-plugin-copy-merge

license npm release codecov

Copy & Merge files and folders, with glob support. This plugin is extended rollup-plugin-copy plugin which support the merge functionality. Thanks #vladshcherbin

Installation

# yarn
yarn add rollup-plugin-copy-merge --dev

# npm
npm i rollup-plugin-copy-merge --save-dev

Usage

// 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' },
      ]
    })
  ]
}

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
  • 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.

Merge (extended)

Can merge using file attribute.

copy({
  targets: [{ src: 'assets/polyfill/*.js', file: 'dist/public/polyfill.js' }],
  flatten: false
});
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, src_path) => `${name}-v1.${extension}`
    }
  ]
});
Transform file contents
copy({
  targets: [
    {
      src: 'src/index.html',
      dest: 'dist/public',
      transform: (contents, src_file_name, src_path) =>
        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
});

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 Vlad Shcherbin

License

MIT