Webpack 中文文档(v4.15.1) 目录

webpack CopyWebpackPlugin

Copies individual files or entire directories to the build directory.

Install

npm install --save-dev copy-webpack-plugin

Usage

new CopyWebpackPlugin([patterns], options)

A pattern looks like: { from: &apossource&apos, to: &aposdest&apos }

Or, in the simple case of just a from with the default destination, you can use a string primitive instead of an object: &apossource&apos

#

Name Required Default Details
from Y examples:
&aposrelative/file.txt&apos
&apos/absolute/file.txt&apos
&aposrelative/dir&apos
&apos/absolute/dir&apos
&apos**/*&apos
{glob:&apos**/*&apos, dot: true}

Globs accept minimatch options







to N output root if from is file or dir

resolved glob path if from is glob

examples:
&aposrelative/file.txt&apos
&apos/absolute/file.txt&apos
&aposrelative/dir&apos
&apos/absolute/dir&apos
&aposrelative/[name].[ext]&apos
&apos/absolute/[name].[ext]&apos

Templates are file-loader patterns







toType N &aposfile&apos if to has extension or from is file

&aposdir&apos if from is directory, to has no extension or ends in &apos/&apos

&apostemplate&apos if to contains a template pattern



context N options.context \ \ compiler.options.context A path that determines how to interpret the from path
flatten N false Removes all directory references and only copies file names

If files have the same name, the result is non-deterministic

ignore N [] Additional globs to ignore for this pattern
transform N function(content, path) {
%uA0%uA0return content
}

Function that modifies file contents before writing to webpack
force N false Overwrites files already in compilation.assets (usually added by other plugins)

Available options:

Name Default Details
context compiler.options.context A path that determines how to interpret the from path, shared for all patterns
ignore [] Array of globs to ignore (applied to from)
copyUnmodified false Copies files, regardless of modification when using watch or webpack-dev-server. All files are copied on first build, regardless of this option.
debug &aposwarning&apos options:
&aposwarning&apos - only warnings
&aposinfo&apos or true - file location and read info
&aposdebug&apos - very detailed debugging info


Examples

const CopyWebpackPlugin = require('copy-webpack-plugin')
const path = require('path')

module.exports = {
    context: path.join(__dirname, 'app'),
    devServer: {
        // This is required for older versions of webpack-dev-server
        // if you use absolute 'to' paths. The path should be an
        // absolute path to your build destination.
        outputPath: path.join(__dirname, 'build')
    },
    plugins: [
        new CopyWebpackPlugin([
            // {output}/file.txt
            { from: 'from/file.txt' },

            // equivalent
            'from/file.txt',

            // {output}/to/file.txt
            { from: 'from/file.txt', to: 'to/file.txt' },

            // {output}/to/directory/file.txt
            { from: 'from/file.txt', to: 'to/directory' },

            // Copy directory contents to {output}/
            { from: 'from/directory' },

            // Copy directory contents to {output}/to/directory/
            { from: 'from/directory', to: 'to/directory' },

            // Copy glob results to /absolute/path/
            { from: 'from/directory/**/*', to: '/absolute/path' },

            // Copy glob results (with dot files) to /absolute/path/
            {
                from: {
                    glob:'from/directory/**/*',
                    dot: true
                },
                to: '/absolute/path'
            },

            // Copy glob results, relative to context
            {
                context: 'from/directory',
                from: '**/*',
                to: '/absolute/path'
            },

            // {output}/file/without/extension
            {
                from: 'path/to/file.txt',
                to: 'file/without/extension',
                toType: 'file'
            },

            // {output}/directory/with/extension.ext/file.txt
            {
                from: 'path/to/file.txt',
                to: 'directory/with/extension.ext',
                toType: 'dir'
            }
        ], {
            ignore: [
                // Doesn't copy any files with a txt extension    
                '*.txt',

                // Doesn't copy any file, even if they start with a dot
                '**/*',

                // Doesn't copy any file, except if they start with a dot
                { glob: '**/*', dot: false }
            ],

            // By default, we only copy modified files during
            // a watch or webpack-dev-server build. Setting this
            // to `true` copies all files.
            copyUnmodified: true
        })
    ]
}

FAQ

"EMFILE: too many open files" or "ENFILE: file table overflow"

Globally patch fs with graceful-fs

npm install graceful-fs --save-dev

At the top of your webpack config, insert this

const fs = require('fs')
const gracefulFs = require('graceful-fs')
gracefulFs.gracefulify(fs)

See this issue for more details

This doesn&apost copy my files with webpack-dev-server

Starting in version 3.0.0, we stopped using fs to copy files to the filesystem and started depending on webpack&aposs in-memory filesystem:

... webpack-dev-server will serve the static files in your build folder. It’ll watch your source files for changes and when changes are made the bundle will be recompiled. This modified bundle is served from memory at the relative path specified in publicPath (see API). It will not be written to your configured output directory.

If you must have webpack-dev-server write to your output directory, you can force it with the write-file-webpack-plugin.

Maintainers


上一篇:ContextReplacementPlugin
下一篇:DefinePlugin