7.3 KiB
Vutron - Vite + Vue 3 + Electron Template
Project Overview
Vutron is a preconfigured template for developing cross-platform desktop applications using modern web technologies. The project combines:
- Vite as the build tool and development server
- Vue 3 with TypeScript for the user interface
- Electron for creating desktop applications
- Vuetify as the UI component library
- Pinia for state management
- vue-i18n for internationalization
- Playwright for automated testing
The template provides a ready-to-use development environment with hot-reload, cross-platform build support, automated testing, and theme management (dark/light).
Architecture
The project follows the typical Electron architecture with three main processes:
Main Process (src/main/)
- Handles application lifecycle
- Manages windows and system integration
- Located in
src/main/index.ts - Also includes utilities, tray functionality, and IPC handlers
Preload Process (src/preload/)
- Acts as an isolated bridge between main and renderer processes
- Uses
contextBridgeto securely expose APIs to the renderer - Located in
src/preload/index.ts
Renderer Process (src/renderer/)
- Contains the Vue 3 application
- Uses Vuetify for UI components
- Located in
src/renderer/with:- Components (
src/renderer/components/) - Screens/views (
src/renderer/screens/) - Router (
src/renderer/router/index.ts) - State management with Pinia (
src/renderer/store/) - Internationalization (
src/renderer/locales/) - Utility functions (
src/renderer/utils/)
- Components (
Building and Running
Prerequisites
- Node.js >= 20.0.0
- pnpm package manager (recommended)
Development
# Install dependencies
pnpm install
# Start development server with hot-reload
pnpm dev
# Development with debug info
pnpm dev:debug
# Force reinstall dependencies and start development
pnpm dev:debug:force
# run Typescript Type check
pnpm typecheck
Building
# Build for all platforms
pnpm build:all
# Build for specific platforms
pnpm build:mac # macOS
pnpm build:win # Windows
pnpm build:linux # Linux
# Build without packaging (useful for quick testing)
pnpm build:dir
# Run type checking, formatting, and build
pnpm build
Testing
# Run Playwright tests
pnpm test
# Run tests on Linux with virtual display
pnpm test:linux
Linting and Formatting
# Check for linting issues
pnpm lint
# Fix linting issues automatically
pnpm lint:fix
Key Features
- Hot Module Replacement: Develop with instant feedback via Vite's fast hot-reload
- Type Safety: Full TypeScript support across the application
- Internationalization: Built-in multi-language support (11 languages available)
- Theme Management: Easy switching between dark and light themes
- State Management: Pinia for reactive state management
- Cross-platform Builds: Build for Windows, macOS, and Linux from a single codebase
- Testing: Integrated Playwright testing setup
- Logging: electron-log for both main and renderer processes
- Security: Secure IPC communication between processes
Project Structure
├── buildAssets/ # Build configurations and icons
├── dist/ # Build output directory
├── docs/ # Documentation
├── node_modules/ # Dependencies
├── src/ # Source code
│ ├── main/ # Electron main process code
│ ├── preload/ # Preload script for context isolation
│ └── renderer/ # Vue application code
│ ├── components/ # Vue components
│ ├── locales/ # Translation files
│ ├── plugins/ # Vue plugins (i18n, Pinia, Vuetify)
│ ├── router/ # Vue Router configuration
│ ├── screens/ # Application views/pages
│ ├── store/ # Pinia stores
│ ├── utils/ # Utility functions
│ ├── App.vue # Root component
│ ├── index.html # HTML entry point
│ └── main.ts # Vue application entry point
├── tests/ # Test files
├── .vscode/ # VS Code settings
├── .editorconfig # Editor configuration
├── .gitignore # Git ignore rules
├── .prettierignore # Prettier ignore rules
├── .prettierrc # Prettier configuration
├── eslint.config.ts # ESLint configuration
├── package.json # Project dependencies and scripts
├── playwright.config.ts # Playwright test configuration
├── pnpm-lock.yaml # Dependency lock file
├── pnpm-workspace.yaml # pnpm workspace configuration
├── README.md # Project documentation
├── tsconfig.json # TypeScript configuration
├── tsconfig.node.json # TypeScript configuration for Node.js files
└── vite.config.mts # Vite configuration
Development Conventions
-
Code Style:
- Uses ESLint with TypeScript and Vue plugin
- Formatted with Prettier
- Follows Vue 3 Composition API with TypeScript
-
Component Structure:
- Components use Vue 3's
<script setup>syntax - Written in TypeScript with proper typing
- Utilize Vuetify components for UI
- Components use Vue 3's
-
Internationalization:
- Uses vue-i18n for multi-language support
- Translation files stored in
src/renderer/locales/ - Keys are organized in JSON format
-
State Management:
- Uses Pinia for state management
- Stores are defined in
src/renderer/store/ - Follow Pinia's composition store pattern
-
Routing:
- Uses Vue Router with web hash history
- Routes defined in
src/renderer/router/index.ts
-
IPC Communication:
- Secure communication between main and renderer processes
- Uses whitelisted channels defined in preload script
- Accessible via
window.mainApiin renderer process
Internationalization
The application supports multiple languages with the following locale files:
- English (
en) - Korean (
ko) - Simplified Chinese (
zh-hans) - Traditional Chinese (
zh-hant) - German (
de) - Spanish (
es) - Japanese (
ja) - French (
fr) - Russian (
ru) - Portuguese (
pt) - Dutch (
nl)
Electron Integration
The application integrates with Electron features through:
- IPC communication for sending messages between processes
- Native file dialog support
- External link opening
- Application version retrieval
- Error handling and logging
Testing
The project includes Playwright for end-to-end testing, with configuration in playwright.config.ts and test files in the tests/ directory.
Build Outputs
Building creates different distribution formats based on the platform:
- macOS: DMG installer for x64, arm64, and universal architectures
- Windows: APPX, ZIP, Portable, and NSIS installers (x64)
- Linux: SNAP, DEB, and RPM packages (x64)
Artifacts are named with the format ${productName} ${version}_${arch}.${ext} and stored in the release/${version} directory.
run pnpm typecheck before finish the task
Always respond in 中文