|  |  | <div align="center">
 | 
						
						
						
							|  |  |   <a href="https://github.com/webpack/webpack">
 | 
						
						
						
							|  |  |     <img width="200" height="200"
 | 
						
						
						
							|  |  |       src="https://webpack.js.org/assets/icon-square-big.svg">
 | 
						
						
						
							|  |  |   </a>
 | 
						
						
						
							|  |  | </div>
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | [![npm][npm]][npm-url]
 | 
						
						
						
							|  |  | [![node][node]][node-url]
 | 
						
						
						
							|  |  | [![deps][deps]][deps-url]
 | 
						
						
						
							|  |  | [![tests][tests]][tests-url]
 | 
						
						
						
							|  |  | [![cover][cover]][cover-url]
 | 
						
						
						
							|  |  | [![chat][chat]][chat-url]
 | 
						
						
						
							|  |  | [![size][size]][size-url]
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | # copy-webpack-plugin
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Copies individual files or entire directories, which already exist, to the build directory.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ## Getting Started
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | To begin, you'll need to install `copy-webpack-plugin`:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```console
 | 
						
						
						
							|  |  | $ npm install copy-webpack-plugin --save-dev
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Then add the plugin to your `webpack` config. For example:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | const CopyPlugin = require('copy-webpack-plugin');
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       { from: 'source', to: 'dest' },
 | 
						
						
						
							|  |  |       { from: 'other', to: 'public' },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ℹ️ `webpack-copy-plugin` is not designed to copy files generated from the build process; rather, it is to copy files that already exist in the source tree, as part of the build process.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ℹ️ If you want `webpack-dev-server` to write files to the output directory during development, you can force it with the [`writeToDisk`](https://github.com/webpack/webpack-dev-middleware#writetodisk) option or the [`write-file-webpack-plugin`](https://github.com/gajus/write-file-webpack-plugin).
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ## Options
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | The plugin's signature:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [new CopyPlugin(patterns, options)],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ### Patterns
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | |               Name                |        Type         |                     Default                     | Description                                                                                           |
 | 
						
						
						
							|  |  | | :-------------------------------: | :-----------------: | :---------------------------------------------: | :---------------------------------------------------------------------------------------------------- |
 | 
						
						
						
							|  |  | |          [`from`](#from)          | `{String\|Object}`  |                   `undefined`                   | Glob or path from where we сopy files.                                                                |
 | 
						
						
						
							|  |  | |            [`to`](#to)            |     `{String}`      |            `compiler.options.output`            | Output path.                                                                                          |
 | 
						
						
						
							|  |  | |       [`context`](#context)       |     `{String}`      | `options.context \|\| compiler.options.context` | A path that determines how to interpret the `from` path.                                              |
 | 
						
						
						
							|  |  | |        [`toType`](#totype)        |     `{String}`      |                   `undefined`                   | Determinate what is `to` option - directory, file or template.                                        |
 | 
						
						
						
							|  |  | |          [`test`](#test)          | `{String\|RegExp}`  |                   `undefined`                   | Pattern for extracting elements to be used in `to` templates.                                         |
 | 
						
						
						
							|  |  | |         [`force`](#force)         |     `{Boolean}`     |                     `false`                     | Overwrites files already in `compilation.assets` (usually added by other plugins/loaders).            |
 | 
						
						
						
							|  |  | |        [`ignore`](#ignore)        |      `{Array}`      |                      `[]`                       | Globs to ignore files.                                                                                |
 | 
						
						
						
							|  |  | |       [`flatten`](#flatten)       |     `{Boolean}`     |                     `false`                     | Removes all directory references and only copies file names.                                          |
 | 
						
						
						
							|  |  | |         [`cache`](#cache)         | `{Boolean\|Object}` |                     `false`                     | Enable `transform` caching. You can use `{ cache: { key: 'my-cache-key' } }` to invalidate the cache. |
 | 
						
						
						
							|  |  | |     [`transform`](#transform)     |    `{Function}`     |                   `undefined`                   | Allows to modify the file contents.                                                                   |
 | 
						
						
						
							|  |  | | [`transformPath`](#transformpath) |    `{Function}`     |                   `undefined`                   | Allows to modify the writing path.                                                                    |
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `from`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `String|Object`
 | 
						
						
						
							|  |  | Default: `undefined`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Glob or path from where we сopy files.
 | 
						
						
						
							|  |  | Globs accept [minimatch options](https://github.com/isaacs/minimatch).
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | You can define `from` as `Object` and use the [`node-glob` options](https://github.com/isaacs/node-glob#options).
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ⚠️ Don't use directly `\\` in `from` (i.e `path\to\file.ext`) option because on UNIX the backslash is a valid character inside a path component, i.e., it's not a separator.
 | 
						
						
						
							|  |  | > On Windows, the forward slash and the backward slash are both separators.
 | 
						
						
						
							|  |  | > Instead please use `/` or `path` methods.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       'relative/path/to/file.ext',
 | 
						
						
						
							|  |  |       '/absolute/path/to/file.ext',
 | 
						
						
						
							|  |  |       'relative/path/to/dir',
 | 
						
						
						
							|  |  |       '/absolute/path/to/dir',
 | 
						
						
						
							|  |  |       '**/*',
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: '**/*',
 | 
						
						
						
							|  |  |         globOptions: {
 | 
						
						
						
							|  |  |           dot: false,
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `to`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `String`
 | 
						
						
						
							|  |  | Default: `compiler.options.output`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Output path.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ⚠️ Don't use directly `\\` in `to` (i.e `path\to\dest`) option because on UNIX the backslash is a valid character inside a path component, i.e., it's not a separator.
 | 
						
						
						
							|  |  | > On Windows, the forward slash and the backward slash are both separators.
 | 
						
						
						
							|  |  | > Instead please use `/` or `path` methods.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: '**/*',
 | 
						
						
						
							|  |  |         to: 'relative/path/to/dest/',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: '**/*',
 | 
						
						
						
							|  |  |         to: '/absolute/path/to/dest/',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: '**/*',
 | 
						
						
						
							|  |  |         to: '[path][name].[contenthash].[ext]',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `context`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `String`
 | 
						
						
						
							|  |  | Default: `options.context|compiler.options.context`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | A path that determines how to interpret the `from` path.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ⚠️ Don't use directly `\\` in `context` (i.e `path\to\context`) option because on UNIX the backslash is a valid character inside a path component, i.e., it's not a separator.
 | 
						
						
						
							|  |  | > On Windows, the forward slash and the backward slash are both separators.
 | 
						
						
						
							|  |  | > Instead please use `/` or `path` methods.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/*.txt',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         context: 'app/',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `toType`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `String`
 | 
						
						
						
							|  |  | Default: `undefined`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Determinate what is `to` option - directory, file or template.
 | 
						
						
						
							|  |  | Sometimes it is hard to say what is `to`, example `path/to/dir-with.ext`.
 | 
						
						
						
							|  |  | If you want to copy files in directory you need use `dir` option.
 | 
						
						
						
							|  |  | We try to automatically determine the `type` so you most likely do not need this option.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | |       Name       |    Type    |   Default   | Description                                                                                        |
 | 
						
						
						
							|  |  | | :--------------: | :--------: | :---------: | :------------------------------------------------------------------------------------------------- |
 | 
						
						
						
							|  |  | |   **`'dir'`**    | `{String}` | `undefined` | If `from` is directory, `to` has no extension or ends in `'/'`                                     |
 | 
						
						
						
							|  |  | |   **`'file'`**   | `{String}` | `undefined` | If `to` has extension or `from` is file                                                            |
 | 
						
						
						
							|  |  | | **`'template'`** | `{String}` | `undefined` | If `to` contains [a template pattern](https://github.com/webpack-contrib/file-loader#placeholders) |
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ##### `'dir'`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'path/to/file.txt',
 | 
						
						
						
							|  |  |         to: 'directory/with/extension.ext',
 | 
						
						
						
							|  |  |         toType: 'dir',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ##### `'file'`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'path/to/file.txt',
 | 
						
						
						
							|  |  |         to: 'file/without/extension',
 | 
						
						
						
							|  |  |         toType: 'file',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ##### `'template'`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/',
 | 
						
						
						
							|  |  |         to: 'dest/[name].[hash].[ext]',
 | 
						
						
						
							|  |  |         toType: 'template',
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `test`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `string|RegExp`
 | 
						
						
						
							|  |  | Default: `undefined`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Pattern for extracting elements to be used in `to` templates.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Defines a `{RegExp}` to match some parts of the file path.
 | 
						
						
						
							|  |  | These capture groups can be reused in the name property using `[N]` placeholder.
 | 
						
						
						
							|  |  | Note that `[0]` will be replaced by the entire path of the file,
 | 
						
						
						
							|  |  | whereas `[1]` will contain the first capturing parenthesis of your `{RegExp}`
 | 
						
						
						
							|  |  | and so on...
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: '*/*',
 | 
						
						
						
							|  |  |         to: '[1]-[2].[hash].[ext]',
 | 
						
						
						
							|  |  |         test: /([^/]+)\/(.+)\.png$/,
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `force`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `Boolean`
 | 
						
						
						
							|  |  | Default: `false`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Overwrites files already in `compilation.assets` (usually added by other plugins/loaders).
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/**/*',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         force: true,
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `ignore`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `Array`
 | 
						
						
						
							|  |  | Default: `[]`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Globs to ignore files.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/**/*',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         ignore: ['*.js'],
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ⚠️ Note that only relative path should be provided to ignore option, an example to ignore `src/assets/subfolder/ignorfile.js` :
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/assets',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         ignore: ['subfolder/ingorefile.js'],
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `flatten`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `Boolean`
 | 
						
						
						
							|  |  | Default: `false`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Removes all directory references and only copies file names.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ⚠️ If files have the same name, the result is non-deterministic.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/**/*',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         flatten: true,
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `cache`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `Boolean|Object`
 | 
						
						
						
							|  |  | Default: `false`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Enable/disable `transform` caching. You can use `{ cache: { key: 'my-cache-key' } }` to invalidate the cache.
 | 
						
						
						
							|  |  | Default path to cache directory: `node_modules/.cache/copy-webpack-plugin`.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/*.png',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         transform(content, path) {
 | 
						
						
						
							|  |  |           return optimize(content);
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |         cache: true,
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `transform`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `Function`
 | 
						
						
						
							|  |  | Default: `undefined`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Allows to modify the file contents.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/*.png',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         transform(content, path) {
 | 
						
						
						
							|  |  |           return optimize(content);
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/*.png',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         transform(content, path) {
 | 
						
						
						
							|  |  |           return Promise.resolve(optimize(content));
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `transformPath`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Type: `Function`
 | 
						
						
						
							|  |  | Default: `undefined`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Allows to modify the writing path.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ⚠️ Don't return directly `\\` in `transformPath` (i.e `path\to\newFile`) option because on UNIX the backslash is a valid character inside a path component, i.e., it's not a separator.
 | 
						
						
						
							|  |  | > On Windows, the forward slash and the backward slash are both separators.
 | 
						
						
						
							|  |  | > Instead please use `/` or `path` methods.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/*.png',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         transformPath(targetPath, absolutePath) {
 | 
						
						
						
							|  |  |           return 'newPath';
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [
 | 
						
						
						
							|  |  |     new CopyPlugin([
 | 
						
						
						
							|  |  |       {
 | 
						
						
						
							|  |  |         from: 'src/*.png',
 | 
						
						
						
							|  |  |         to: 'dest/',
 | 
						
						
						
							|  |  |         transformPath(targetPath, absolutePath) {
 | 
						
						
						
							|  |  |           return Promise.resolve('newPath');
 | 
						
						
						
							|  |  |         },
 | 
						
						
						
							|  |  |       },
 | 
						
						
						
							|  |  |     ]),
 | 
						
						
						
							|  |  |   ],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ### Options
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | |                Name                 |    Type     |          Default           | Description                                                                                                                                       |
 | 
						
						
						
							|  |  | | :---------------------------------: | :---------: | :------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------ |
 | 
						
						
						
							|  |  | |       [`logLevel`](#loglevel)       | `{String}`  |        **`'warn'`**        | Level of messages that the module will log                                                                                                        |
 | 
						
						
						
							|  |  | |         [`ignore`](#ignore)         |  `{Array}`  |            `[]`            | Array of globs to ignore (applied to `from`)                                                                                                      |
 | 
						
						
						
							|  |  | |        [`context`](#context)        | `{String}`  | `compiler.options.context` | A path that determines how to interpret the `from` path, shared for all patterns                                                                  |
 | 
						
						
						
							|  |  | | [`copyUnmodified`](#copyunmodified) | `{Boolean}` |          `false`           | Copies files, regardless of modification when using watch or `webpack-dev-server`. All files are copied on first build, regardless of this option |
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `logLevel`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | This property defines the level of messages that the module will log. Valid levels include:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | - `trace`
 | 
						
						
						
							|  |  | - `debug`
 | 
						
						
						
							|  |  | - `info`
 | 
						
						
						
							|  |  | - `warn` (default)
 | 
						
						
						
							|  |  | - `error`
 | 
						
						
						
							|  |  | - `silent`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Setting a log level means that all other levels below it will be visible in the
 | 
						
						
						
							|  |  | console. Setting `logLevel: 'silent'` will hide all console output. The module
 | 
						
						
						
							|  |  | leverages [`webpack-log`](https://github.com/webpack-contrib/webpack-log#readme)
 | 
						
						
						
							|  |  | for logging management, and more information can be found on its page.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [new CopyPlugin([...patterns], { logLevel: 'debug' })],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `ignore`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Array of globs to ignore (applied to `from`).
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [new CopyPlugin([...patterns], { ignore: ['*.js', '*.css'] })],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `context`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | A path that determines how to interpret the `from` path, shared for all patterns.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [new CopyPlugin([...patterns], { context: '/app' })],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | #### `copyUnmodified`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Copies files, regardless of modification when using watch or `webpack-dev-server`. All files are copied on first build, regardless of this option.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | > ℹ️ By default, we only copy **modified** files during a `webpack --watch` or `webpack-dev-server` build. Setting this option to `true` will copy all files.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | **webpack.config.js**
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```js
 | 
						
						
						
							|  |  | module.exports = {
 | 
						
						
						
							|  |  |   plugins: [new CopyPlugin([...patterns], { copyUnmodified: true })],
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ## Contributing
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | Please take a moment to read our contributing guidelines if you haven't yet done so.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | [CONTRIBUTING](./.github/CONTRIBUTING.md)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ## License
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | [MIT](./LICENSE)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | [npm]: https://img.shields.io/npm/v/copy-webpack-plugin.svg
 | 
						
						
						
							|  |  | [npm-url]: https://npmjs.com/package/copy-webpack-plugin
 | 
						
						
						
							|  |  | [node]: https://img.shields.io/node/v/copy-webpack-plugin.svg
 | 
						
						
						
							|  |  | [node-url]: https://nodejs.org
 | 
						
						
						
							|  |  | [deps]: https://david-dm.org/webpack-contrib/copy-webpack-plugin.svg
 | 
						
						
						
							|  |  | [deps-url]: https://david-dm.org/webpack-contrib/copy-webpack-plugin
 | 
						
						
						
							|  |  | [tests]: https://dev.azure.com/webpack-contrib/copy-webpack-plugin/_apis/build/status/webpack-contrib.copy-webpack-plugin?branchName=master
 | 
						
						
						
							|  |  | [tests-url]: https://dev.azure.com/webpack-contrib/copy-webpack-plugin/_build/latest?definitionId=5&branchName=master
 | 
						
						
						
							|  |  | [cover]: https://codecov.io/gh/webpack-contrib/copy-webpack-plugin/branch/master/graph/badge.svg
 | 
						
						
						
							|  |  | [cover-url]: https://codecov.io/gh/webpack-contrib/copy-webpack-plugin
 | 
						
						
						
							|  |  | [chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg
 | 
						
						
						
							|  |  | [chat-url]: https://gitter.im/webpack/webpack
 | 
						
						
						
							|  |  | [size]: https://packagephobia.now.sh/badge?p=copy-webpack-plugin
 | 
						
						
						
							|  |  | [size-url]: https://packagephobia.now.sh/result?p=copy-webpack-plugin
 |