mirror of
https://github.com/motajs/template.git
synced 2026-09-13 02:08:50 +08:00
6.1 KiB
6.1 KiB
Technology Stack
Analysis Date: 2026-09-07
Languages
Primary:
- TypeScript 6.0.3 - All engine/package source, build scripts, and docs config (monorepo
packages/,packages-user/,src/,script/,docs/) - Vue 3 SFC (Single File Components) - Client UI (
*.vueinpackages-user/client-modules/,src/App.vue)
Secondary:
- JavaScript (legacy runtime) - The legacy H5 runtime layer under
public/libs/*.jsand game contentpublic/project/*.js(data.js, enemys.js, events.js, floors, maps, etc.) - Less - Stylesheets (
src/styles.less,javascriptEnabled: truein Vite config) - CSS - Editor/assets styles (
public/styles.css,public/_server/**)
Runtime
Environment:
- Node.js
^20.0.0 || >=22.0.0(perdev.md) - Browsers supporting ESNext; production build targets
Chrome >= 56,Firefox >= 51,Edge >= 79,Safari >= 15,Opera >= 43via@vitejs/plugin-legacy(script/build-game.ts)
Package Manager:
- pnpm
>= 10.0.0(perdev.md) - Lockfile:
pnpm-lock.yaml(present) - Workspace:
pnpm-workspace.yaml— globspackages/*,packages-user/*, andsrc/;onlyBuiltDependencies:core-js,esbuild,ttf2woff2,vue-demi
Frameworks
Core:
- Vue
^3.5.29- UI framework for the client render side (src/main.ts,src/App.vue) - Vite
^7.3.1- Dev server and production bundler (vite.config.ts,script/dev.ts,script/build-game.ts) - Ant Design Vue
^3.2.20+@ant-design/icons-vue ^6.1.0- UI component library (bundled as manual chunkantdv)
Rendering (custom, in-repo):
- WebGL2 - Hand-written render engine in
packages/render/src/core/gl2.ts,assets/composer.ts(no external rendering framework) gl-matrix ^3.4.4- Matrix/vector math for WebGL (packages/render/src/core/transform.ts,core/item.ts)maxrects-packer ^2.7.3- Texture atlas packing (packages/render/src/assets/composer.ts,streamComposer.ts)
Audio:
- Web Audio API (
AudioContext) viapackages/audio/src/context.tswith wasm decoders:@wasm-audio-decoders/ogg-vorbis ^0.1.20ogg-opus-decoder ^1.7.3opus-decoder ^0.7.11codec-parser ^2.5.0(codec stream parsing inpackages/audio/src/source.ts)
Testing:
- Vitest
^4.0.18- Test runner (package.jsonscript"test": "vitest")
Docs:
- VitePress
^1.6.4- Documentation site (docs/.vitepress/config.ts, output topublic/_docs) - Mermaid
^11.12.3+vitepress-plugin-mermaid ^2.0.17+markdown-it-mathjax3 ^4.3.2
Build/Dev:
- Rollup
^4.59.0(+@rollup/plugin-*family) - Programmatic bundling in build scripts @babel/core ^7.29.0/@babel/preset-env ^7.29.0/@babel/cli ^7.28.6- Post-build script minification (script/build-game.ts)vue-tsc ^2.2.12- Type checking for.vuefilestsx ^4.21.0- Execute TypeScript build/dev scriptsfontmin ^2.0.3- CJK font subsetting at build time (script/build-game.ts)- Express
^5.2.1- Local editor/dev HTTP server (script/dev.ts) ws ^8.19.0- WebSocket server for hot reload (script/dev.ts)chokidar ^3.6.0- File watching (script/dev.ts)archiver ^7.0.1+compressing ^1.10.4- Zip packaging (script/build-game.ts)madge ^8.0.0- Circular dependency check ("check:circular"script)
Key Dependencies
Critical:
dexie ^4.4.2- IndexedDB wrapper for game saves (packages-user/data-common/src/save/system.ts)lz-string ^1.5.0- Save compression (packages-user/client-modules/src/render/utils/saves.ts,packages/legacy-ui/src/utils.ts)jszip ^3.10.1- Zip handling (packages/loader/)axios ^1.13.6- HTTP client (script/special.ts,packages/legacy-ui/src/utils.ts)lodash-es ^4.17.23- Utility functions (used widely across packages)eventemitter3 ^5.0.4- Event emittermutate-animate ^1.4.2- Animation tweening (packages/legacy-ui/src/utils.ts)anon-tokyo 0.0.0-alpha.0- "high performance interpreter" (declared dependency; no import found inpackages//src//packages-user/source)chart.js ^4.5.1- Charts (declared; not detected in source, likely editor-facing)
Infrastructure:
fs-extra ^11.3.4,glob ^11.1.0- File system utilities in build scriptsless ^4.5.1,postcss-preset-env ^9.6.0- CSS preprocessing
Configuration
Environment:
- No
.env/.env.*files present — the project does not use runtime environment variables. import.meta.env.BASE_URLis used for asset path prefixing (packages/loader/src/task.ts,packages/legacy-ui/src/utils.ts). Vitebaseis set to./(vite.config.ts).- Editor config:
public/_server/config.json(gitignored; auto-generated as{}byensureConfig()inscript/dev.ts).
Build:
tsconfig.json—strict,moduleResolution: "bundler",jsx: "preserve"(jsxImportSource: "vue"), path aliases@motajs/*→packages/*/srcand@user/*→packages-user/*/src.tsconfig.node.json— coversvite.config.ts,script/, anddocs/.vitepress/*.vite.config.ts— dynamic aliases generated frompackages/*/srcandpackages-user/*/src; LessjavascriptEnabled;postcss-preset-env..prettierrc—tabWidth: 4,singleQuote,semi,trailingComma: "none",endOfLine: "crlf".eslint.config.js— flat config combining@eslint/js,typescript-eslint,eslint-plugin-vue,eslint-plugin-react,eslint-plugin-prettier..madgerc— madge config for circular-dependency detection (.ts/.tsx, skips type imports).
Platform Requirements
Development:
- Node.js 20/22+, pnpm 10+, VSCode (recommended extensions:
dbaeumer.vscode-eslint,esbenp.prettier-vscode,vue.volar,slevesque.shader,tobermory.es6-string-htmlin.vscode/extensions.json). - Run
pnpm dev(Vite on 5173 + Express editor server on 3000) orpnpm test.
Production:
- Static HTML5 game:
pnpm build:gameproducesdist/(deployable static bundle) anddist.zip. - Deployment target: GitHub Pages via
.github/workflows/page.yml(buildsdistfolder togh-pagesbranch). - The data layer (
src/data.ts) is built separately as an IIFE bundle (data.process.js) usable for replay verification in Node.
Stack analysis: 2026-09-07