添加一些数据

This commit is contained in:
yuding
2026-04-21 15:07:36 +08:00
parent 9a185699ae
commit d60cc4448d
6 changed files with 317 additions and 16 deletions

View File

@@ -3,6 +3,43 @@ import dts from 'vite-plugin-dts';
import { resolve } from 'path';
import cssInjectedByJs from 'vite-plugin-css-injected-by-js';
import pkg from './package.json';
import type { Plugin } from 'rollup';
/**
* 修复 webpack 5 / Next.js 兼容性问题
*
* Vite 在 lib 模式下构建 ESM 产物时,会将内联的 data URL 资源包装为
* `new URL("data:...", import.meta.url).href` 格式。
*
* 当 Next.js 14 (webpack 5) 消费这个 ESM 产物时webpack 5 的 asset module
* 系统会尝试处理 `new URL(..., import.meta.url)`,但 Next.js 内部的默认规则
* 对 `asset/inline` 类型配置了不兼容的 `filename` generator导致 schema
* validation 报错:
* "generator has an unknown property 'filename'. These properties are valid:
* object { dataUrl? }"
*
* 此插件在输出阶段将 `new URL("data:...", import.meta.url).href` 替换为直接的
* data URL 字符串,避免触发 webpack 的 asset module 处理逻辑。
*
* data URL 本身是绝对的,不需要 import.meta.url 作为 base因此这种替换是安全的。
*/
const fixWebpack5CompatPlugin = (): Plugin => ({
name: 'fix-webpack5-compat',
renderChunk(code) {
// 匹配 new URL("data:...", import.meta.url).href 或 new URL('data:...', import.meta.url).href
const fixed = code.replace(
/new URL\(["'](data:[^"']+)["'],\s*import\.meta\.url\)\.href/g,
'"$1"'
);
if (fixed !== code) {
console.log('[fix-webpack5-compat] Replaced new URL(data:..., import.meta.url) with direct data URL');
}
return {
code: fixed,
map: null,
};
},
});
export default defineConfig(() => {
return {
@@ -44,6 +81,9 @@ export default defineConfig(() => {
// 禁用代码分割,将所有代码打包到一个文件
inlineDynamicImports: true,
},
plugins: [
fixWebpack5CompatPlugin(),
],
},
sourcemap: true,
emptyOutDir: true,