Rollup plugin to copy assets during build.
Points:
- Uses emitFile by default so all files goes through rollup asset pipeline
- Minimal configuration
- Runs once per file by default
- Support hashes (uses
assetFileNames
from rollup) - Watch on files so when they changed that can be copied again (but only if timestamp is changed)
- Minimal amount of logs by default
- Supports globs (check 'glob' for syntax)
- Can be run both as output or build plugin (build plugin by default for watch)
Uses @niceties/logger
to log messages, can be configured through @niceties/logger
API.
Using npm:
npm install --save-dev @rollup-extras/plugin-copy
Using yarn:
yarn add --dev @rollup-extras/plugin-copy
Assuming you imported plugin using:
import copy from '@rollup-extras/plugin-copy';
Next examples are equivalent:
copy('assets/*')
copy(['assets/*'])
copy({ src: 'assets/*' })
copy({ src: ['assets/*'] })
copy([{ src: 'assets/*' }])
copy({ targets: 'assets/*' })
copy({ targets: ['assets/*'] })
copy({ targets: [{ src: 'assets/*' }] })
all of them will trigger a copy (through emitFile) of all files in assets in each output directory.
To copy files on every rebuild in watch mode use copyOnce
= false
:
copy({ src: 'assets/*', copyOnce: false })
// or
copy({ targets: ['assets/*'], copyOnce: false })
To stop triggering on changes in files use watch
= false
:
copy({ src: 'assets/*', watch: false })
// or
copy({ targets: ['assets/*'], watch: false })
To display more information in console use verbose
= true
:
copy({ src: 'assets/*', verbose: true })
// or
copy({ targets: ['assets/*'], verbose: true })
By default plugin uses glob-parent
to preserve directory structure of assets (relative to glob parent path). To flatten files in assets directory use flatten
= true
:
copy({ src: 'assets/*', flatten: true })
// or
copy({ targets: ['assets/*'], flatten: true })
To add hashes to file names use exactFileNames
= false
, tweak assetFileNames
option in rollup config if needed. Files with the same content will be deduplicated by rollup
in this mode.
copy({ src: 'assets/*', exactFileNames: false })
// or
copy({ targets: ['assets/*'], exactFileNames: false })
To work as output plugin use outputPlugin
= true
option (watch mode will be disabled because of rollup
limitations):
copy({ src: 'assets/*', outputPlugin: true })
// or
copy({ targets: ['assets/*'], outputPlugin: true })
To stop files being emitted through rollup pipeline use can use emitFiles
= false
. Please note that you need to specify dest
and it will not be relative to the output directory, also the file will not be copied into each output directory.
copy({ src: 'assets/*', dest: 'public', emitFiles: false })
// or
copy({ targets: [{ src: 'assets/*', dest: 'public' }], emitFiles: false })
Use the dest
option to put assets into the subfolder in the assets directory. As an example if we have assets
as a directory for assets and public
as an output directory and we specify 'dest'
= 'fonts'
assets will be copied into public/assets/fonts
preserving assets directory structure.
Use exclude
option to filter out files in assets (passed to ignore option of glob options). For example *.json
will filter out json files.
copy({ src: 'assets/*', dest: 'fonts', exclude: '*.json' })
// or
copy({ targets: [{ src: 'assets/*', dest: 'fonts', exclude: '*.json' }] })
type SingleTargetDesc = {
src: string | string[],
exclude?: string | string[],
dest?: string;
};
type MultipleTargetsDesc = string | string[] | SingleTargetDesc | SingleTargetDesc[];
type CopyPluginOptions = {
targets?: MultipleTargetsDesc,
pluginName?: string, // defaults to '@rollup-extras/plugin-copy'
copyOnce?: boolean, // true by default
watch?: boolean, // true by default
verbose?: boolean | 'list-filenames', // false by default
flattern?: boolean, // false by default
exactFileNames?: boolean, // true by default
outputPlugin?: boolean, // false by default
emitFiles?: boolean // true by default,
emitOriginalFileName?: 'absolute' | 'relative' | ((fileName: string) => string) // 'absolute' by default
} | MultipleTargetsDesc;
- https://github.com/vladshcherbin/rollup-plugin-copy
- https://github.com/bengsfort/rollup-plugin-copy-assets
- https://github.com/paulmelnikow/rollup-plugin-cpy
- https://github.com/sormy/rollup-plugin-smart-asset
- https://github.com/modernweb-dev/web/tree/master/packages/rollup-plugin-copy
- https://github.com/rollup/plugins/tree/master/packages/url