mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 15:06:20 +00:00
45620cab15
The existing manualChunks rule had a bug: every renderer-related check
sat INSIDE `if(id.includes('node_modules'))`, but the renderer source
is consumed via filesystem alias to ../Nitro_Render_V3/packages/*/src
— it is not under node_modules. So the `Nitro_Render_V3` branch never
fired, and the entire renderer (~1MB+) ended up merged into the main
app chunk instead of its own nitro-renderer-*.js.
Move the renderer-path check BEFORE the node_modules guard and base
it on either the literal "Nitro_Render_V3" segment or the resolved
rendererRoot (whichever is in use). The node_modules branch still
handles the unlikely case that someone publishes the renderer as a
real npm package later.
Result expected on yarn build:
- one nitro-renderer-*.js chunk for renderer + pixi (pixi is aliased
to rendererRoot/node_modules/pixi.js, so its id will include
rendererRoot too)
- one vendor-*.js chunk for third-party deps from node_modules
- one src-*.js (or similar) chunk for the app
This makes the first paint of the app faster (browser can parallel-
download chunks) and lets the CDN cache the renderer between deploys
where only the client code changed.
No behavior change at runtime — just a different on-disk layout.
104 lines
4.2 KiB
JavaScript
104 lines
4.2 KiB
JavaScript
import react from '@vitejs/plugin-react';
|
|
import { existsSync } from 'fs';
|
|
import { resolve } from 'path';
|
|
import { defineConfig } from 'vite';
|
|
|
|
const legacyRendererRoot = resolve(__dirname, '..', 'renderer');
|
|
const currentRendererRoot = resolve(__dirname, '..', 'Nitro_Render_V3');
|
|
const rendererRoot = existsSync(currentRendererRoot) ? currentRendererRoot : legacyRendererRoot;
|
|
|
|
if(!existsSync(rendererRoot))
|
|
{
|
|
// Fail fast with a useful message instead of waiting for Rolldown to
|
|
// report "Failed to resolve import @nitrots/nitro-renderer" deep
|
|
// inside the bundle pass.
|
|
throw new Error(
|
|
'\n Nitro renderer SDK not found.\n\n' +
|
|
' vite.config.mjs expects one of these directories to exist as a sibling of this repo:\n' +
|
|
` - ${ currentRendererRoot } (preferred)\n` +
|
|
` - ${ legacyRendererRoot } (legacy)\n\n` +
|
|
' Clone the Nitro_Render_V3 repo next to Nitro-V3 and rerun:\n' +
|
|
' git clone <renderer-repo> ../Nitro_Render_V3\n' +
|
|
' cd ../Nitro_Render_V3 && yarn install\n\n' +
|
|
' (See CLAUDE.md "Commands" section for the full setup walkthrough.)\n'
|
|
);
|
|
}
|
|
|
|
const ReactCompilerConfig = {
|
|
target: '19'
|
|
};
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
react({
|
|
babel: {
|
|
plugins: [
|
|
[ 'babel-plugin-react-compiler', ReactCompilerConfig ]
|
|
]
|
|
}
|
|
})
|
|
],
|
|
server: {
|
|
fs: {
|
|
allow: [
|
|
resolve(__dirname),
|
|
rendererRoot,
|
|
]
|
|
},
|
|
proxy: {
|
|
'/api': {
|
|
target: process.env.AUTH_PROXY_TARGET || 'http://192.168.0.181:2096',
|
|
changeOrigin: true,
|
|
}
|
|
}
|
|
},
|
|
resolve: {
|
|
tsconfigPaths: true,
|
|
alias: {
|
|
'@': resolve(__dirname, 'src'),
|
|
'~': resolve(__dirname, 'node_modules'),
|
|
'@nitrots/api': resolve(rendererRoot, 'packages/api/src/index.ts'),
|
|
'@nitrots/assets': resolve(rendererRoot, 'packages/assets/src/index.ts'),
|
|
'@nitrots/avatar': resolve(rendererRoot, 'packages/avatar/src/index.ts'),
|
|
'@nitrots/camera': resolve(rendererRoot, 'packages/camera/src/index.ts'),
|
|
'@nitrots/communication': resolve(rendererRoot, 'packages/communication/src/index.ts'),
|
|
'@nitrots/configuration': resolve(rendererRoot, 'packages/configuration/src/index.ts'),
|
|
'@nitrots/events': resolve(rendererRoot, 'packages/events/src/index.ts'),
|
|
'@nitrots/localization': resolve(rendererRoot, 'packages/localization/src/index.ts'),
|
|
'@nitrots/room': resolve(rendererRoot, 'packages/room/src/index.ts'),
|
|
'@nitrots/session': resolve(rendererRoot, 'packages/session/src/index.ts'),
|
|
'@nitrots/sound': resolve(rendererRoot, 'packages/sound/src/index.ts'),
|
|
'@nitrots/utils/src': resolve(rendererRoot, 'packages/utils/src'),
|
|
'@nitrots/utils': resolve(rendererRoot, 'packages/utils/src/index.ts'),
|
|
'pixi.js': resolve(rendererRoot, 'node_modules/pixi.js'),
|
|
'pixi-filters': resolve(rendererRoot, 'node_modules/pixi-filters'),
|
|
'howler': resolve(rendererRoot, 'node_modules/howler'),
|
|
}
|
|
},
|
|
build: {
|
|
assetsInlineLimit: 102400,
|
|
chunkSizeWarningLimit: 200000,
|
|
manifest: true,
|
|
rollupOptions: {
|
|
output: {
|
|
assetFileNames: 'src/assets/[name]-[hash].[ext]',
|
|
manualChunks: id =>
|
|
{
|
|
// Renderer source is consumed via filesystem alias
|
|
// (../Nitro_Render_V3/packages/*/src) so it is NOT
|
|
// under node_modules — needs its own branch before
|
|
// the node_modules check.
|
|
if(id.includes('Nitro_Render_V3') || id.includes(`${ rendererRoot }`)) return 'nitro-renderer';
|
|
|
|
if(id.includes('node_modules'))
|
|
{
|
|
if(id.includes('@nitrots/nitro-renderer') || id.includes('renderer3')) return 'nitro-renderer';
|
|
|
|
return 'vendor';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|