A friend asked me today what is a simple way to copy files from a directory (in their case, extract some images from a node module) to the build directory, using Rollup.
My solution is to create a simple plugin like this:
import path from "path"
import fs from "fs"
function copyFiles(from, to, overwrite = false) {
return {
name: 'copy-files',
generateBundle() {
const log = msg => console.log('\x1b[36m%s\x1b[0m', msg)
log(`copy files: ${from} → ${to}`)
fs.readdirSync(from).forEach(file => {
const fromFile = `${from}/${file}`
const toFile = `${to}/${file}`
if (fs.existsSync(toFile) && !overwrite)
return
log(`• ${fromFile} → ${toFile}`)
fs.copyFileSync(
path.resolve(fromFile),
path.resolve(toFile)
)
})
}
}
}
You can then use it as other plugins:
plugins: [
//...
copyFiles("./node_modules/leaflet/dist/images", "./public/build"),
//...
]
No need for 3rd party dependencies, just a simple function that doesn't do anything fancy!