-
-
Notifications
You must be signed in to change notification settings - Fork 6.2k
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
当构建库时使用 rollupOptions.output.banner 会导致打包出错误的 umd #8412
Comments
A plugin like this could be used to workaround it. const bannerPlugin = {
name: 'banner',
enforce: 'post',
generateBundle(options, bundle) {
const banner = '/*! banner */'
const footer = ''
for (const module of Object.values(bundle)) {
if (module.type === 'chunk') {
module.code = banner + module.code + footer
// should change source map if needed
}
}
}
} |
I found that the key to the bug was not rollupOptions.output.banner, but |
That PR will work for comments but it won't work with something like
|
Reopening as it is not completely fixed. |
I adjusted the workaround plugin slightly to keep using // rollup-banner-plugin.js
const RollupBannerPlugin = {
name: 'banner',
enforce: 'post',
generateBundle(options, bundle) {
const banner = options.banner() || ''
const footer = options.footer() || ''
for (const module of Object.values(bundle)) {
if (module.type === 'chunk') {
module.code = banner + module.code + footer
// should change source map if needed
}
}
}
} // vite.config.js
import RollupBannerPlugin from './rollup-banner-plugin.js'
export default defineConfig({
build: {
...
rollupOptions: {
output: {
banner: '/** Here goes my banner */\n\n',
footer: '\n\n/** and here some footer notes. */',
},
plugins: [
RollupBannerPlugin
]
}
}
}) |
The workaround works, but I think it should work from the box, when a person uses Vite in the library mode. |
However, there is a bug with this workaround — it duplicates the line with For the follow text: // ==UserScript==
// @name HrefTaker
// @license GPL-3.0
// @version 0.7.1-2023.4.17
// @namespace gh.alttiri
// ==/UserScript== the result is // ==UserScript==
// @name HrefTaker
// @license GPL-3.0
// @version 0.7.1-2023.4.17
// @namespace gh.alttiri
// ==/UserScript==
// @license GPL-3.0 with unnecessary appended The raw Rollup works fine: import {rollup} from "rollup";
const bundle = await rollup({
input: "./main.js",
});
await bundle.write({
banner: `// ==UserScript==
// @name HrefTaker
// @license GPL-3.0
// @version 0.7.1-2023.4.17
// @namespace gh.alttiri
// ==/UserScript==\n`,
dir: "./dist"
}); It seems this issue reason is that Vite (even with I see no option to disable it. |
slightly modified version to keep shebang when your have some. const RollupBannerPlugin = {
name: 'banner',
enforce: 'post',
generateBundle(options, bundle) {
const banner = options.banner() || ''
const footer = options.footer() || ''
for (const module of Object.values(bundle)) {
if (module.type === 'chunk') {
const shebang = module.code.match(/^#![^\n]*\n/)
if (shebang) {
module.code = shebang[0] + banner + module.code.slice(shebang[0].length) + footer
} else {
module.code = banner + module.code + footer
}
// should change source map if needed
}
}
}
}``` |
Describe the bug
also see #8163.
I determined that this was caused by #7948 and has not been fixed in #8110.
I currently use version 2.9.5 to avoid this problem.
I also tried v3.0.0-alpha 7. It has not been fixed at present.
我也遇到了 #8163 这个问题。
我确定这是由 #7948 引入的错误的正则替换导致的,并且并未在 #8110 中得到修复。
我目前使用 2.9.5 版本来避免这个问题。
我也尝试使用了v3.0.0-alpha.7,目前并未得到修复。
Reproduction
https://github.com/ddosakura/a-bug-for-vite/blob/master/dist/mylib.umd.js
System Info
Used Package Manager
pnpm
Logs
No response
Validations
The text was updated successfully, but these errors were encountered: