添加一些数据
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user