98 lines
3.8 KiB
TypeScript
98 lines
3.8 KiB
TypeScript
import { copyCepToDev, copyCepToProd } from "./copyCepToDev"
|
||
import { createConfig } from "./createConfig"
|
||
// 注意:已移除 buildJsx 依赖,现在使用内联 JSX 方式
|
||
//@ts-ignore
|
||
import packageConfig from "../../package.json"
|
||
import defaultConfig from '../../cep.config';
|
||
import { ICepConfig } from "./types";
|
||
|
||
let g_config: any = ''
|
||
interface CepPluginOptions {
|
||
cepConfig?: ICepConfig;
|
||
jsxInput?: string;
|
||
jsxOutput?: string;
|
||
jsxIncludes?: string[];
|
||
}
|
||
|
||
export default function cepPlugin(options: CepPluginOptions = {}) {
|
||
const config = options.cepConfig || defaultConfig;
|
||
return {
|
||
name: 'transform-file',
|
||
async buildStart(viteConfig: any) {
|
||
// 已移除 JSX 构建逻辑,现在使用内联 JSX 方式
|
||
if (process.env.NODE_ENV === 'production') {
|
||
console.log('正式环境 - 使用内联 JSX');
|
||
}
|
||
},
|
||
transform(src: any, id: any) {
|
||
|
||
},
|
||
configResolved(viteConfig: any) {
|
||
g_config = viteConfig
|
||
if (viteConfig.isProduction)
|
||
return console.log('[cepPlugin]打包不处理');
|
||
// 已移除 JSX 监听构建,现在使用内联 JSX 方式
|
||
console.log('[cepPlugin] 使用内联 JSX,无需构建外部文件');
|
||
|
||
const name = `${getProjectName(viteConfig.root)}-dev`
|
||
// 使用配置的端口(strictPort: true 确保端口不会变)
|
||
const port = viteConfig.server?.port || 5180
|
||
const serverURL = `http://localhost:${port}/`
|
||
|
||
try {
|
||
const cepConfig = createConfig(viteConfig.root, {
|
||
name: name,
|
||
id: `com.${name}`,
|
||
version: packageConfig.version,
|
||
}, "dev")
|
||
copyCepToDev({
|
||
serverURL: serverURL,
|
||
name: name,
|
||
isBuild: false
|
||
}, cepConfig)
|
||
} catch (error) {
|
||
console.log('[CEP] 初始化失败');
|
||
console.log(error);
|
||
}
|
||
},
|
||
async closeBundle() {
|
||
if (!g_config.isProduction)
|
||
return console.log('[cepPlugin]开发环境不处理');
|
||
|
||
// await buildJsxByProd()
|
||
const name = `${getProjectName(g_config.root)}`
|
||
try {
|
||
// Use the provided config instead of recreating from package.json if possible,
|
||
// but createConfig merges simple props.
|
||
// Wait, createConfig uses hardcoded template logic.
|
||
// Let's passed detailed config if needed.
|
||
// For now, we trust config passed in options.
|
||
|
||
// Note: createConfig logic might need review if we want full Custom Config control.
|
||
// But typically it uses the 'config' object we imported/selected at top.
|
||
|
||
// Actually createConfig generates the manifest content string.
|
||
// We should pass our 'config' object to the copy/write logic.
|
||
|
||
console.log('[id]:' + config.id);
|
||
|
||
copyCepToProd({
|
||
// 方案 B:CEP 插件打开后直接跳转到服务器 Shell 登录页
|
||
serverURL: 'https://aidg168.uk/shell/#/login',
|
||
name: name,
|
||
isBuild: true,
|
||
distDir: g_config.build.outDir
|
||
}, config)
|
||
} catch (error) {
|
||
console.log('[CEP] 初始化失败');
|
||
console.log(error);
|
||
}
|
||
console.log('[cepPlugins] 编译成功');
|
||
}
|
||
}
|
||
}
|
||
|
||
function getProjectName(root: string) {
|
||
if(root.endsWith("src/launcher")) return "Designer"; // Hack for launcher root? No, Vite root usually project root.
|
||
return root.split('/').pop()
|
||
} |