From 3e06def63766a1976d971f44b3cb45cf1c3195b1 Mon Sep 17 00:00:00 2001 From: Jokul Date: Sat, 4 Jul 2026 16:12:35 +0800 Subject: [PATCH] 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 --- .gitignore | 18 ++++++++++++ AGENTS.md | 63 +++++++++++++++++++++++++++++++++++++++++ README.md | 28 +++++++++++++++++- electron.vite.config.ts | 48 +++++++++++++++++++++++++++++++ package.json | 34 ++++++++++++++++++++++ tsconfig.json | 20 +++++++++++++ tsconfig.node.json | 14 +++++++++ tsconfig.web.json | 14 +++++++++ 8 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 electron.vite.config.ts create mode 100644 package.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 tsconfig.web.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7babda8 --- /dev/null +++ b/.gitignore @@ -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/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..4036476 --- /dev/null +++ b/AGENTS.md @@ -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. diff --git a/README.md b/README.md index 4f55f9f..17540fc 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,29 @@ # JRedisDesktop -桌面端Redis客户端 \ No newline at end of file +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 diff --git a/electron.vite.config.ts b/electron.vite.config.ts new file mode 100644 index 0000000..b8fa1b9 --- /dev/null +++ b/electron.vite.config.ts @@ -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 + } + } +}) diff --git a/package.json b/package.json new file mode 100644 index 0000000..fe5f820 --- /dev/null +++ b/package.json @@ -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" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c301f17 --- /dev/null +++ b/tsconfig.json @@ -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" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..5c13ee2 --- /dev/null +++ b/tsconfig.node.json @@ -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"] +} diff --git a/tsconfig.web.json b/tsconfig.web.json new file mode 100644 index 0000000..1630336 --- /dev/null +++ b/tsconfig.web.json @@ -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"] +}