# rollup-plugin-copy

> Copy files and folders using Rollup

Latest version **3.5.0** (published 2023-09-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install rollup-plugin-copy
pnpm add rollup-plugin-copy
yarn add rollup-plugin-copy
bun add rollup-plugin-copy
```

## Health

**Score 40/100 (D)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 3.5.0 |
| Published | 2023-09-02 |
| First published | 2017-04-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=8.3 |
| Dependencies | 5 |
| Unpacked size | 16.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 282 |
| Author | Vlad Shcherbin |
| Maintainers | shcherbin |
| Keywords | rollup, rollup-plugin, copy, cp, asset, assets, file, files, folder, folders, glob |

## Links

- npm: https://www.npmjs.com/package/rollup-plugin-copy
- Repository: https://github.com/vladshcherbin/rollup-plugin-copy
- Homepage: https://github.com/vladshcherbin/rollup-plugin-copy#readme
- Issues: https://github.com/vladshcherbin/rollup-plugin-copy/issues
- npm.io page: https://npm.io/package/rollup-plugin-copy

## Dependencies (5)

- [globby](https://npm.io/package/globby.md) 10.0.1
- [fs-extra](https://npm.io/package/fs-extra.md) ^8.1.0
- [colorette](https://npm.io/package/colorette.md) ^1.1.0
- [@types/fs-extra](https://npm.io/package/@types/fs-extra.md) ^8.0.1
- [is-plain-object](https://npm.io/package/is-plain-object.md) ^3.0.0

## Alternatives

- [unionfs](https://npm.io/package/unionfs.md) — 2.2M weekly downloads
- [path-starts-with](https://npm.io/package/path-starts-with.md) — 35.9K weekly downloads
- [redzip](https://npm.io/package/redzip.md) — 1.2K weekly downloads
- [vscode-anymatch](https://npm.io/package/vscode-anymatch.md) — 848 weekly downloads
- [@ledgerhq/coin-filecoin](https://npm.io/package/@ledgerhq/coin-filecoin.md) — 793 weekly downloads

## Recent versions

- 3.5.0 (latest) — 2023-09-02
- 3.4.0 — 2021-02-18
- 3.3.0 — 2020-01-22
- 3.2.1 — 2020-01-18
- 3.2.0 — 2020-01-16
- 3.1.0 — 2019-07-25
- 3.0.0 — 2019-06-10
- 2.0.1 — 2019-05-04
- 2.0.0 — 2019-05-02
- 1.1.0 — 2019-04-10
- 1.0.0 — 2019-04-08
- 0.3.0 — 2019-04-06
- 0.2.3 — 2017-04-29
- 0.2.1 — 2017-04-29
- 0.2.0 — 2017-04-29
- … 6 more at https://npm.io/package/rollup-plugin-copy/versions

## README

# rollup-plugin-copy

[![Build Status](https://travis-ci.com/vladshcherbin/rollup-plugin-copy.svg?branch=master)](https://travis-ci.com/vladshcherbin/rollup-plugin-copy)
[![Codecov](https://codecov.io/gh/vladshcherbin/rollup-plugin-copy/branch/master/graph/badge.svg)](https://codecov.io/gh/vladshcherbin/rollup-plugin-copy)

Copy files and folders, with glob support.

## Installation

```bash
# yarn
yarn add rollup-plugin-copy -D

# npm
npm install rollup-plugin-copy -D
```

## Usage

```js
// 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** (`string` `Array`): Path or glob of what to copy
- **dest** (`string` `Array`): One or more destinations where to copy
- **rename** (`string` `Function`): 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](https://github.com/sindresorhus/globby) is used inside, check it for [glob pattern](https://github.com/sindresorhus/globby#globbing-patterns) examples.

##### File

```js
copy({
  targets: [{ src: 'src/index.html', dest: 'dist/public' }]
})
```

##### Folder

```js
copy({
  targets: [{ src: 'assets/images', dest: 'dist/public' }]
})
```

##### Glob

```js
copy({
  targets: [{ src: 'assets/*', dest: 'dist/public' }]
})
```

##### Glob: multiple items

```js
copy({
  targets: [{ src: ['src/index.html', 'src/styles.css', 'assets/images'], dest: 'dist/public' }]
})
```

##### Glob: negated patterns

```js
copy({
  targets: [{ src: ['assets/images/**/*', '!**/*.gif'], dest: 'dist/public/images' }]
})
```

##### Multiple targets

```js
copy({
  targets: [
    { src: 'src/index.html', dest: 'dist/public' },
    { src: 'assets/images/**/*', dest: 'dist/public/images' }
  ]
})
```

##### Multiple destinations

```js
copy({
  targets: [{ src: 'src/index.html', dest: ['dist/public', 'build/public'] }]
})
```

##### Rename with a string

```js
copy({
  targets: [{ src: 'src/app.html', dest: 'dist/public', rename: 'index.html' }]
})
```

##### Rename with a function

```js
copy({
  targets: [{
    src: 'assets/docs/*',
    dest: 'dist/public/docs',
    rename: (name, extension, fullPath) => `${name}-v1.${extension}`
  }]
})
```

##### Transform file contents

```js
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.

```js
copy({
  targets: [{ src: 'assets/*', dest: 'dist/public' }],
  verbose: true
})
```

#### hook

Type: `string` | Default: `buildEnd`

[Rollup hook](https://rollupjs.org/guide/en/#hooks) the plugin should use. By default, plugin runs when rollup has finished bundling, before bundle is written to disk.

```js
copy({
  targets: [{ src: 'assets/*', dest: 'dist/public' }],
  hook: 'writeBundle'
})
```

#### copyOnce

Type: `boolean` | Default: `false`

Copy items once. Useful in watch mode.

```js
copy({
  targets: [{ src: 'assets/*', dest: 'dist/public' }],
  copyOnce: true
})

```
#### copySync

Type: `boolean` | Default: `false`

Copy items synchronous.

```js
copy({
  targets: [{ src: 'assets/*', dest: 'dist/public' }],
  copySync: true
})
```

#### flatten

Type: `boolean` | Default: `true`

Remove the directory structure of copied files.

```js
copy({
  targets: [{ src: 'assets/**/*', dest: 'dist/public' }],
  flatten: false
})
```

All other options are passed to packages, used inside:
  - [globby](https://github.com/sindresorhus/globby)
  - [fs-extra copy function](https://github.com/jprichardson/node-fs-extra/blob/7.0.0/docs/copy.md)

## Original Author

[Cédric Meuter](https://github.com/meuter)

## License

MIT

---
_Source: https://npm.io/package/rollup-plugin-copy · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
