Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
webpack-plugin-copy
Advanced tools
Primarily forked to add the option to copy file permissions
This is a webpack plugin that copies individual files or entire directories to the build directory.
Install the plugin:
npm install --save-dev webpack-plugin-copy
new WebpackPluginCopy([patterns], options)
A pattern looks like:
{ from: 'source', to: 'dest' }
Name | Required | Default | Details |
---|---|---|---|
from | Y | examples: 'relative/file.txt' '/absolute/file.txt' 'relative/dir' '/absolute/dir' '**/*' {glob:'**/*', dot: true} Globs accept minimatch options | |
to | N | output root if from is file or dirresolved glob path if from is glob | examples: 'relative/file.txt' '/absolute/file.txt' 'relative/dir' '/absolute/dir' 'relative/[name].[ext]' '/absolute/[name].[ext]' Templates are file-loader patterns |
toType | N | 'file' if to has extension or from is file'dir' if from is directory, to has no extension or ends in '/''template' if to contains a template pattern | |
context | N | 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) { return content; } | Function that modifies file contents before writing to webpack |
force | N | false | Overwrites files already in compilation.assets (usually added by other plugins) |
copyPermissions | N | false | Applies source file permissions to destination files |
Name | Default | Details |
---|---|---|
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 | 'warning' | options: 'warning' - only warnings 'info' or true - file location and read info 'debug' - very detailed debugging info |
var WebpackPluginCopy = require('webpack-plugin-copy');
var 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 WebpackPluginCopy([
// {output}/file.txt
{ from: '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
})
]
};
Run npm test
Globally patch fs with graceful-fs
npm install graceful-fs --save-dev
At the top of your webpack config, insert this
var fs = require('fs');
var gracefulFs = require('graceful-fs');
gracefulFs.gracefulify(fs);
See this issue for more details
This plugin is not using fs to copy files to the filesystem but is depending on webpack's 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.
MIT
FAQs
Copy files and directories in webpack
The npm package webpack-plugin-copy receives a total of 66 weekly downloads. As such, webpack-plugin-copy popularity was classified as not popular.
We found that webpack-plugin-copy demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.