Files
AIDC-AI-ComfyUI-Copilot/ui/vite.config.ts
T
2025-06-25 14:43:55 +08:00

139 lines
4.4 KiB
TypeScript

/*
* @Author: 晴知 qingli.hql@alibaba-inc.com
* @Date: 2024-12-10 22:11:57
* @LastEditors: ai-business-hql ai.bussiness.hql@gmail.com
* @LastEditTime: 2025-02-25 20:58:44
* @FilePath: /comfyui_copilot/ui/vite.config.ts
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { exec } from 'child_process';
import path from 'path';
import tailwindcss from 'tailwindcss';
import autoprefixer from 'autoprefixer';
import postcssNesting from 'postcss-nesting';
const rewriteImportPlugin = ({ isDev }) => {
return {
name: "rewrite-import-plugin", // this name will show up in warnings and errors
resolveId(source) {
if (!isDev) {
return;
}
if (source === "/scripts/app.js") {
// Change the path to the new host
return "http://127.0.0.1:8188/scripts/app.js";
}
if (source === "/scripts/api.js") {
return "http://127.0.0.1:8188/scripts/api.js";
}
return null; // Other imports should not be affected
},
};
};
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
envDir: ".",
css: {
postcss: {
plugins: [
postcssNesting(),
tailwindcss(),
autoprefixer(),
],
},
},
build: {
watch: mode === "development" ? {
include: ["src/**"],
buildStart() {
// 只在开发模式下启动 Tailwind CSS watch 进程
console.log("Starting Tailwind CSS watch process...");
const tailwindProcess = exec(
'npx tailwindcss -i ./src/scoped-tailwind.css -o ./src/output.css --watch',
(error, stdout, stderr) => {
if (error) {
console.error(`Tailwind CSS watch error: ${error}`);
return;
}
if (stderr) {
console.error(`Tailwind CSS stderr: ${stderr}`);
return;
}
console.log(`Tailwind CSS stdout: ${stdout}`);
}
);
// Cleanup process on build end
process.on('exit', () => {
tailwindProcess.kill();
});
console.log("Tailwind CSS watch process started.");
}
} : undefined, // 在生产环境下不启用 watch
// minify: false, // ___DEBUG__MODE only
// sourcemap: true, // ___DEBUG___MODE only
emptyOutDir: true,
rollupOptions: {
// externalize deps that shouldn't be bundled into your library
external: ["/scripts/app.js", "/scripts/api.js"],
input: {
input: "/src/main.tsx",
fonts: "/src/fonts.css"
},
output: {
// Provide global variables to use in the UMD build for externalized deps
globals: {
app: "app",
Litegraph: "LiteGraph",
},
dir: "../dist",
// assetFileNames: "[name]-[hash][extname]",
entryFileNames: "copilot_web/[name].js",
chunkFileNames: `copilot_web/[name]-[hash].js`,
assetFileNames: (assetInfo) => {
if (assetInfo.name === 'fonts.css') {
return 'copilot_web/[name].css';
}
return `copilot_web/assets/[name]-[hash].[ext]`;
},
manualChunks: {
// 只包含实际使用的 React 相关依赖
'vendor-react': ['react', 'react-dom'],
// Markdown 相关依赖
'vendor-markdown': [
'react-markdown',
'remark-gfm',
'remark-math',
'rehype-katex',
'rehype-external-links'
],
// UI 组件
'vendor-ui': [
'@heroicons/react'
],
// 消息组件
'message-components': [
'./src/components/chat/messages/AIMessage',
'./src/components/chat/messages/UserMessage',
'./src/components/chat/messages/NodeInstallGuide',
'./src/components/chat/messages/NodeSearch',
'./src/components/chat/messages/DownstreamSubgraphs',
],
}
},
},
// Enable compression
target: 'esnext',
minify: 'esbuild',
cssMinify: true,
chunkSizeWarningLimit: 600 // 适当调整警告阈值
},
plugins: [react(), rewriteImportPlugin({ isDev: mode === "development" })],
}));