@rushstack/hashed-folder-copy-plugin
Installation
npm install @rushstack/hashed-folder-copy-plugin --save-dev
Overview
This webpack plugin provides a simple method for copying a folder to the build output
and including a hash in the folder's name, accessible to the bundle's runtime.
Usage
In your Webpack config, include the plugin in your plugins array:
import { HashedFolderCopyPlugin } from '@rushstack/hashed-folder-copy-plugin';
{
plugins: [
new HashedFolderCopyPlugin()
]
}
and call the requireFolder function in your webpack bundle:
const folderUrl = requireFolder({
outputFolder: 'my-folder-name_[hash]',
sources: [
{
globsBase: '../assets/',
globs: ['**/*.png']
}
]
})
TypeScript typings are provided for the requireFolder function:
import type { IRequireFolderOptions } from '@rushstack/hashed-folder-copy-plugin';
declare function requireFolder(options: IRequireFolderOptions): string;
const folderUrl: string = requireFolder({
outputFolder: 'my-folder-name_[hash]',
sources: [
{
globsBase: '../assets/',
globPatterns: ['**/*.png']
}
]
})
The requireFolder takes an options object with two properties:
outputFolder
This is the name of the folder to be created in the webpack output folder. Its
name supports a [hash] token, which will be replaced with a stable hash of the assets
that are copied to the folder. Note that the [hash] token is not required.
sources
This is an array of glob base paths and glob patterns that will be copied to the
output folder. Each entry in this array takes a globsBase property, which is the
base path to the folder to be copied, and a globPatterns property, which is an array of
glob patterns to be evaluated under the globsBase folder. The path in globsBase
supports standard Node resolution.
Example project
See the example project.
A note about ambient types
To get the requireFolder function type to work in TypeScript, include a reference to
"@rushstack/hashed-folder-copy-plugin/ambientTypes" in your tsconfig.json file's
compilerOptions.types property. For example:
{
"compilerOptions": {
"types": [
"webpack-env",
"@rushstack/hashed-folder-copy-plugin/ambientTypes"
]
}
}