Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
rollup-plugin-copy
Advanced tools
The rollup-plugin-copy package is a Rollup plugin that allows you to copy files and folders as part of your build process. This can be useful for tasks such as copying static assets, configuration files, or other resources that need to be included in your final build output.
Copying Files
This feature allows you to copy individual files or patterns of files from a source directory to a destination directory. In this example, all files in the 'src/assets' directory are copied to the 'dist/assets' directory.
const copy = require('rollup-plugin-copy');
module.exports = {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
plugins: [
copy({
targets: [
{ src: 'src/assets/*', dest: 'dist/assets' }
]
})
]
};
Copying Folders
This feature allows you to copy entire folders from a source directory to a destination directory. In this example, the 'src/config' folder is copied to the 'dist/config' folder.
const copy = require('rollup-plugin-copy');
module.exports = {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
plugins: [
copy({
targets: [
{ src: 'src/config', dest: 'dist/config' }
]
})
]
};
Transforming Files
This feature allows you to transform the contents of files as they are copied. In this example, the 'src/config.json' file is copied to 'dist/config.json' with all instances of 'foo' replaced with 'bar'.
const copy = require('rollup-plugin-copy');
module.exports = {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
plugins: [
copy({
targets: [
{ src: 'src/config.json', dest: 'dist/config.json', transform: (contents) => contents.toString().replace(/foo/g, 'bar') }
]
})
]
};
The copy-webpack-plugin is a similar plugin for Webpack that copies files and directories during the build process. It offers similar functionality to rollup-plugin-copy but is designed to work with Webpack instead of Rollup.
The gulp-copy package is a Gulp plugin that allows you to copy files and directories as part of your Gulp build process. It provides similar functionality to rollup-plugin-copy but is intended for use with Gulp.
The grunt-contrib-copy package is a Grunt plugin that copies files and directories as part of your Grunt build process. It offers similar functionality to rollup-plugin-copy but is designed for use with Grunt.
Copy files and folders, with glob support.
# yarn
yarn add rollup-plugin-copy -D
# npm
npm install rollup-plugin-copy -D
// rollup.config.js
import copy from 'rollup-plugin-copy'
export default {
input: 'src/index.js',
output: {
file: 'dist/app.js',
format: 'cjs'
},
plugins: [
copy({
targets: [
{ src: 'src/index.html', dest: 'dist/public' },
{ src: ['assets/fonts/arial.woff', 'assets/fonts/arial.woff2'], dest: 'dist/public/fonts' },
{ src: 'assets/images/**/*', dest: 'dist/public/images' }
]
})
]
}
There are some useful options:
Type: Array
| Default: []
Array of targets to copy. A target is an object with properties:
string
Array
): Path or glob of what to copystring
Array
): One or more destinations where to copystring
Function
): Change destination file or folder nameFunction
): Modify file contentsEach object should have src and dest properties, rename and transform are optional. globby is used inside, check it for glob pattern examples.
copy({
targets: [{ src: 'src/index.html', dest: 'dist/public' }]
})
copy({
targets: [{ src: 'assets/images', dest: 'dist/public' }]
})
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }]
})
copy({
targets: [{ src: ['src/index.html', 'src/styles.css', 'assets/images'], dest: 'dist/public' }]
})
copy({
targets: [{ src: ['assets/images/**/*', '!**/*.gif'], dest: 'dist/public/images' }]
})
copy({
targets: [
{ src: 'src/index.html', dest: 'dist/public' },
{ src: 'assets/images/**/*', dest: 'dist/public/images' }
]
})
copy({
targets: [{ src: 'src/index.html', dest: ['dist/public', 'build/public'] }]
})
copy({
targets: [{ src: 'src/app.html', dest: 'dist/public', rename: 'index.html' }]
})
copy({
targets: [{
src: 'assets/docs/*',
dest: 'dist/public/docs',
rename: (name, extension, fullPath) => `${name}-v1.${extension}`
}]
})
copy({
targets: [{
src: 'src/index.html',
dest: 'dist/public',
transform: (contents, filename) => contents.toString().replace('__SCRIPT__', 'app.js')
}]
})
Type: boolean
| Default: false
Output copied items to console.
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }],
verbose: true
})
Type: string
| Default: buildEnd
Rollup hook the plugin should use. By default, plugin runs when rollup has finished bundling, before bundle is written to disk.
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }],
hook: 'writeBundle'
})
Type: boolean
| Default: false
Copy items once. Useful in watch mode.
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }],
copyOnce: true
})
Type: boolean
| Default: false
Copy items synchronous.
copy({
targets: [{ src: 'assets/*', dest: 'dist/public' }],
copySync: true
})
Type: boolean
| Default: true
Remove the directory structure of copied files.
copy({
targets: [{ src: 'assets/**/*', dest: 'dist/public' }],
flatten: false
})
All other options are passed to packages, used inside:
MIT
FAQs
Copy files and folders using Rollup
The npm package rollup-plugin-copy receives a total of 420,517 weekly downloads. As such, rollup-plugin-copy popularity was classified as popular.
We found that rollup-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
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.