import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import process from "node:process"; import { fileURLToPath, URL } from "node:url"; import topLevelAwait from "vite-plugin-top-level-await"; // https://vite.dev/config/ export default defineConfig({ plugins: [ { name: "inject-at-top", apply: "build", generateBundle(_, bundle) { Object.values(bundle).forEach((chunk) => { if (chunk.fileName.endsWith(".js")) { // 在文件头部插入代码 var chunkAny = chunk as any; chunkAny.code = `if(globalThis != null){ if(globalThis.global != null){ if(typeof window === "undefined"){ window = globalThis.window } if(typeof document === "undefined"){ document = globalThis.windocument } if(typeof URL === "undefined"){ URL = window.URL } if(typeof SVGElement === "undefined"){ SVGElement = window.SVGElement } }; navigator = window.navigator; const HTMLAnchorElement = globalThis.HTMLAnchorElement; } \n${chunkAny.code}`; } }); }, }, vue(), topLevelAwait(), { name: "fix-recast", transform(code, id) { if (id.includes("recast-detour.js")) { return code.replace(`this["Recast"]`, 'window["Recast"]'); } }, }, ], base: process.env.NODE_ENV === "production" ? "/car2/" : "/", // resolve: { // alias: { // "@": fileURLToPath(new URL("./src", import.meta.url)), // }, // }, build: { target: ["edge90", "chrome90", "firefox90", "safari15"], // lib 和 rollupOptions 在编译网站,不编译库的时候注释掉 lib: { entry: "src/main.ts", // 入口文件路径 name: "XPrint", // 全局变量名(UMD 格式时生效) fileName: (format) => `xprint.${format}.js`, // 输出文件名模板 // formats: ['es', 'umd', 'system'] // 输出格式(ES 模块、UMD 等) // formats: ['es'] // 输出格式(ES 模块) formats: ["es", "umd"], // 输出格式(ES 模块、UMD 等) }, rollupOptions: { output: { inlineDynamicImports: true, // 内联动态导入(禁用代码分割) manualChunks: undefined, // 禁用手动分块 }, }, minify: "esbuild", // 使用 esbuild 压缩 // terserOptions: { // 可选:自定义压缩参数 // compress: { drop_console: true } // } }, optimizeDeps: { exclude: ["recast-navigation"] }, });