Files
esengine/packages/tilemap/vite.config.ts
YHH 673f5e5855 feat(physics): 集成 Rapier2D 物理引擎并修复预览重置问题 (#244)
* feat(physics): 集成 Rapier2D 物理引擎并修复预览重置问题

* fix: 修复 CI 流程并清理代码
2025-11-28 10:32:28 +08:00

102 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineConfig } from 'vite';
import { resolve } from 'path';
import dts from 'vite-plugin-dts';
import react from '@vitejs/plugin-react';
// 自定义插件:将 CSS 内联到 JS 中
function inlineCSS(): any {
return {
name: 'inline-css',
enforce: 'post' as const,
// 在生成 bundle 时注入 CSS
generateBundle(_options: any, bundle: any) {
const bundleKeys = Object.keys(bundle);
// 找到 CSS 文件
const cssFile = bundleKeys.find(key => key.endsWith('.css'));
if (!cssFile || !bundle[cssFile]) {
return;
}
const cssContent = bundle[cssFile].source;
if (!cssContent) return;
// 找到包含编辑器代码的主要 JS 文件
// 优先查找 editor/index.js然后是带 hash 的 index-*.js
const mainJsFile = bundleKeys.find(key =>
(key === 'editor/index.js' || key.includes('index-')) &&
key.endsWith('.js') &&
bundle[key].type === 'chunk' &&
bundle[key].code
);
if (mainJsFile && bundle[mainJsFile]) {
const injectCode = `
(function() {
if (typeof document !== 'undefined') {
var style = document.createElement('style');
style.id = 'esengine-tilemap-styles';
if (!document.getElementById(style.id)) {
style.textContent = ${JSON.stringify(cssContent)};
document.head.appendChild(style);
}
}
})();
`;
bundle[mainJsFile].code = injectCode + bundle[mainJsFile].code;
}
// 删除独立的 CSS 文件(已内联)
delete bundle[cssFile];
}
};
}
export default defineConfig({
plugins: [
react(),
dts({
include: ['src'],
outDir: 'dist',
rollupTypes: false
}),
inlineCSS()
],
esbuild: {
jsx: 'automatic',
},
build: {
lib: {
entry: {
index: resolve(__dirname, 'src/index.ts'),
runtime: resolve(__dirname, 'src/runtime.ts'),
'editor/index': resolve(__dirname, 'src/editor/index.ts')
},
formats: ['es'],
fileName: (format, entryName) => `${entryName}.js`
},
rollupOptions: {
external: [
'@esengine/ecs-framework',
'@esengine/ecs-components',
'@esengine/ecs-engine-bindgen',
'@esengine/asset-system',
'@esengine/editor-core',
'react',
'react/jsx-runtime',
'lucide-react',
'zustand',
/^@esengine\//,
/^@tauri-apps\//
],
output: {
exports: 'named',
preserveModules: false
}
},
target: 'es2020',
minify: false,
sourcemap: true
}
});