chore: init v2 project scaffold

- Add electron-vite + Vue 3 + TypeScript build config
- Add .gitignore with legacy/ exclusion
- Add AGENTS.md with architecture & dev commands
- Update README.md
This commit is contained in:
2026-07-04 16:12:35 +08:00
parent 384acd8fc6
commit 3e06def637
8 changed files with 238 additions and 1 deletions
+18
View File
@@ -0,0 +1,18 @@
node_modules/
out/
dist/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
# Legacy codebase — archived Vue 2 version, not part of v2 build
legacy/
+63
View File
@@ -0,0 +1,63 @@
# AGENTS.md — JRedisDesktop v2
## Project identity
Fork of [AnotherRedisDesktopManager](https://github.com/qishibo/AnotherRedisDesktopManager). The legacy Vue 2 codebase lives in `legacy/` and is gitignored. Work only in the root project.
## Stack
- **Shell:** Electron 33 (`src/main/index.ts`)
- **Preload:** `src/preload/index.ts`
- **Renderer:** Vue 3 + Element Plus + Vue Router (`src/renderer/`)
- **Build:** electron-vite + Vite 6 + TypeScript 5
- **Redis client:** ioredis 5
## Commands
```bash
npm run dev # electron-vite dev (HMR, renderer on :5173)
npm run build # production build → out/
npm start # preview built app
npm run build:unpack # build + electron-builder --dir
npm run build:win # build + electron-builder --win
npm run build:mac # build + electron-builder --mac
npm run build:linux # build + electron-builder --linux
```
## Architecture
```
Electron main (src/main/index.ts)
├── Dev: loads renderer dev server (Vite HMR)
└── Prod: loads out/renderer/index.html
└── Vue 3 SPA (src/renderer/)
@renderer alias → src/renderer/src/
```
## Build config
- `electron.vite.config.ts` defines three build targets: main, preload, renderer
- Renderer dev server runs on port 5173
- Main/preload use `externalizeDepsPlugin()` to keep node_modules external
## TypeScript
- Root `tsconfig.json` references `tsconfig.node.json` (main + preload) and `tsconfig.web.json` (renderer)
- Node target includes `src/main/**/*`, `src/preload/**/*`, `electron.vite.config.ts`
- Web target includes `src/renderer/**/*`
- `@renderer` alias resolves to `src/renderer/src`
## Source layout (expected)
```
src/
├── main/ # Electron main process
├── preload/ # Preload scripts
└── renderer/ # Vue 3 app
├── index.html
└── src/
```
## Legacy
The `legacy/` directory contains the old Vue 2 + Webpack 4 codebase. It is gitignored and not part of the v2 build. See `legacy/AGENTS.md` for its documentation.
+27 -1
View File
@@ -1,3 +1,29 @@
# JRedisDesktop
桌面端Redis客户端
A modern Redis desktop manager built with Electron + Vue 3 + Vite.
> Fork of [AnotherRedisDesktopManager](https://github.com/qishibo/AnotherRedisDesktopManager).
> The legacy Vue 2 codebase is archived in [`legacy/`](legacy/).
## Dev
```bash
npm install
npm run dev # electron-vite dev with HMR
npm run build # production build
```
## Build packages
```bash
npm run build:linux
npm run build:mac
npm run build:win
```
## Stack
- **Shell:** Electron 33
- **Renderer:** Vue 3 + Element Plus + Vue Router
- **Build:** electron-vite + Vite 6 + TypeScript
- **Redis client:** ioredis 5
+48
View File
@@ -0,0 +1,48 @@
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({
main: {
plugins: [externalizeDepsPlugin()],
build: {
outDir: 'out/main',
rollupOptions: {
input: {
index: resolve(__dirname, 'src/main/index.ts')
}
}
}
},
preload: {
plugins: [externalizeDepsPlugin()],
build: {
outDir: 'out/preload',
rollupOptions: {
input: {
index: resolve(__dirname, 'src/preload/index.ts')
}
}
}
},
renderer: {
root: 'src/renderer',
build: {
outDir: 'out/renderer',
rollupOptions: {
input: {
index: resolve(__dirname, 'src/renderer/index.html')
}
}
},
resolve: {
alias: {
'@renderer': resolve(__dirname, 'src/renderer/src')
}
},
plugins: [vue()],
server: {
port: 5173
}
}
})
+34
View File
@@ -0,0 +1,34 @@
{
"name": "jredis-desktop",
"version": "2.0.0",
"description": "A modern Redis desktop manager built with Electron + Vue 3 + Vite",
"author": "Jokul",
"private": true,
"main": "./out/main/index.js",
"type": "module",
"scripts": {
"dev": "electron-vite dev",
"build": "electron-vite build",
"start": "electron-vite preview",
"postinstall": "electron-builder install-app-deps",
"build:unpack": "npm run build && electron-builder --dir",
"build:win": "npm run build && electron-builder --win",
"build:mac": "npm run build && electron-builder --mac",
"build:linux": "npm run build && electron-builder --linux",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx,.vue --fix"
},
"dependencies": {
"ioredis": "^5.7.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.0",
"electron": "^33.4.0",
"electron-builder": "^25.1.0",
"electron-vite": "^3.0.0",
"element-plus": "^2.9.0",
"typescript": "^5.7.0",
"vite": "^6.0.0",
"vue": "^3.5.0",
"vue-router": "^4.5.0"
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"lib": ["ESNext", "DOM", "DOM.Iterable"],
"types": ["vite/client"]
},
"references": [
{ "path": "./tsconfig.node.json" },
{ "path": "./tsconfig.web.json" }
]
}
+14
View File
@@ -0,0 +1,14 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "./out",
"types": ["node"],
"composite": true
},
"include": ["src/main/**/*", "src/preload/**/*", "electron.vite.config.ts"]
}
+14
View File
@@ -0,0 +1,14 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"jsx": "preserve",
"esModuleInterop": true,
"skipLibCheck": true,
"lib": ["ESNext", "DOM", "DOM.Iterable"],
"composite": true
},
"include": ["src/renderer/**/*", "src/renderer/src/**/*.d.ts"]
}