-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] Autodetect dist folder #41
Comments
I can add What do you think? |
Hi everyone, If I may, I think that something like a import {resolve} from "path";
const src = (...paths) => resolve("src", ...paths);
export default {
plugins: [
copy({
dest: resolve("dist"),
targets: [
src("index.html"),
src("service-worker.js"),
src("manifest.webmanifest"),
{
src: resolve("something", "else.json"),
dest: resolve("somewhere", "else")
}
]
})
]
} This would have the advantage of being really concise and reduce the code written for copying multiple files to a similar location. Plus (but I'm really unsure about that) we could maybe use this plugin multiple times for multiple shared folders (while keeping the actual behavior). import {resolve} from "path";
const src = (...paths) => resolve("src", ...paths);
const dist = (...paths) => resolve("dist", ...paths);
export default {
plugins: [
copy({
dest: dist("client"),
targets: [
src("foo"),
src("bar"),
src("baz")
]
}),
copy({
dest: dist("server"),
targets: [
src("foo"),
src("bar"),
src("baz")
]
})
]
} As a workaround, I have found to be used this little function a lot in my Rollup projects. Here is the code snippet. import {path} from "path";
const dist = (...paths) => resolve("path", "to", "dist", ...paths);
dist("client", "index.js"); // ./path/to/dist/client/index.js
dist("server", "main.js"); // ./path/to/dist/server/main.js This also work independently on whether you are using GNU/Linux, Mac OS X or Windows since I Hope it helps while a solution is found. |
@vladshcherbin Hey, I've worked around this allowing to specify function as import RollupPluginCopy from "rollup-plugin-copy"
/** @param {import("rollup-plugin-copy").CopyOptions} options */
function copy(options) {
options.hook ??= "buildEnd"
return {
[options.hook](...args) {
options.targets = options.targets.map(({ dest, ...target }) => ({
...target,
dest: typeof dest === "function" ? dest(...args) : dest,
}))
const plugin = RollupPluginCopy(options)
return plugin[options.hook](...args)
},
}
}
export default {
plugins: [copy({
hook: "writeBundle",
targets: [{
src: "some/folder/files.*",
dest: cfg => cfg.dir,
})
}]
} Feel free to borrow the idea ;) |
Currently I need to prepend every
dest
field withdist/
folder, so I do duplicate where I plan to output files in several places (dest
fields and output options of rollup).Rollup has
outputOptions
hook which can be used to obtain directory from that options. So, I don't need to duplicate it.There are 2 possible cases:
output.file
is specified -dirname(ouput.file)
output.dir
is specified - just use this dir as a root path.The text was updated successfully, but these errors were encountered: