ParcelJS plugin to copy static files from some directory to directory with bundle.
yarn add parcel-plugin-static-files-copy --dev
- Create
static
directory in you project root. - Fill it with your static files
- Run build - and that's all!
Beyond the default settings, you can:
- Name of the directory to be copied.
- Copy multiple directory.
- Copy different directory based on different output directory.
- Watch for changes during development (rebuilding when necessary).
- Exclude paths from copying
The following configures the plugin to copy all files in public
to the build directory and watch for changes in all source files (**
is a deep wildcard).
// package.json
{
...
"staticFiles": {
"staticPath": "public",
"watcherGlob": "**"
}
}
To copy more than one directory to the build directory, specify staticPath
as an array. The following copies public
and vendor/public
:
// package.json
{
...
"staticFiles": {
"staticPath": ["public", "vendor/public"]
}
}
To copy different files (from different directories) based on output directory (e.g. --out-dir dist1
and --out-dir dist2
) make staticPath
a object:
// package.json
{
...
"staticFiles": {
"staticPath": [
{
"outDirPattern": "**/dist1",
"staticPath": "static1"
},
{
"outDirPattern": "**/dist2",
"staticPath": "static2"
}
]
},
}
If you want your files from staticPath
to get copied into a subdirectory inside the parcel --out-dir
, make staticPath
an object with staticOutDir
key:
// package.json
{
...
"staticFiles": {
"staticPath": [
{
"staticPath": "static1",
"staticOutDir": "vendor"
}
]
},
}
Copies files from static1
into the vendor
directory inside the --out-dir
.
Parcel can rebuild your bundle(s) whenever changes occur in the static directory. This is disabled by default, but it can be enabled by specifying a glob pattern for files that shoudl be watched.
Note the relative file path is used in matching (not just the file name). To match filenames in deep directories, start with a "globstar" (double star). The plugin uses Node's built-in Minimatch Library for glob matching.
The following watches all XML files in the static directory:
// package.json
{
...
"staticFiles": {
"staticPath": "public",
"watcherGlob": "**/*.xml"
}
}
To disable watching, either remove the "watcherGlob"
key (disabled is the default) or set it to false/null/undefined:
// package.json
{
...
"staticFiles": {
"staticPath": "public",
"watcherGlob": false
}
}
You can exclude files and directories in your staticPath
from getting copied to the outDir
by specifying excludeGlob
:
// package.json
{
...
"staticFiles": {
"staticPath": "public",
"excludeGlob": "**/*.md"
}
}
Excludes all .md
files in the public
path from getting copied.
Multiple excludeGlob
s are possible by specifying it as array:
// package.json
{
...
"staticFiles": {
"staticPath": "public",
"excludeGlob": ["docs", "docs/**"]
}
}
Excludes the docs
directory and all files inside the docs
directory from getting copied.
You can use the excludeGlob
and negate it to achieve including behavior:
// package.json
{
...
"staticFiles": {
"staticPath": "src",
"excludeGlob": "**/!(locales)/*.+(!(txt)|!(json))"
}
}
Includes only files from locales
directory with .txt
or .json
extension.
Passing options into minimatch to change watcherGlob
and excludeGlob
behavior is possible by specifying a globOptions
object:
// package.json
{
...
"staticFiles": {
"staticPath": "public",
"excludeGlob": ["test", "test/**"],
"globOptions": {
"dot": true
}
}
}
Excludes the test
directory and all files inside the test
directory, including files starting with a dot, from getting copied.
You're interested in contributing? Awesome! Fork, make change, commit and create pull request. I'll do my best to merge changes!