Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

rollup-plugin-copy-merge

syJSdev2kMIT1.0.2TypeScript support: included

Copy & Merge files and folders using Rollup

rollup, rollup-plugin, copy, cp, asset, assets, file, files, folder, folders, glob, concat, merge

readme

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

changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

1.0.2 - 2023-05-10

1.0.1 - 2023-05-10

1.0.0 - 2023-02-23

Added

  • Content merge feature. Read me here.
  • Source file info arguments in rename callback. Read me here.
  • Source file info arguments in transform callback. Read me here