Capacitor 模板
基于 Vue 3 + Capacitor 的跨平台移动应用开发模板,支持 iOS 和 Android 平台,让你用 Web 技术构建原生移动应用。
技术栈
- Vue 3 - 渐进式 JavaScript 框架
- TypeScript - JavaScript 的超集,提供类型安全
- Vite - 下一代前端构建工具
- Capacitor - 跨平台原生应用开发框架
- Vue Router - Vue.js 官方路由管理器
- Pinia - Vue 3 官方状态管理库
- Vue i18n - Vue.js 国际化插件
- Tailwind CSS - 实用优先的 CSS 框架
快速开始
创建项目
bash
# 初始化项目
vup init my-project
# 进入项目目录
cd my-project
# 添加 Capacitor 应用
vup add my-mobile-app
# 选择 Capacitor 模板
开发
bash
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev
开发服务器将在 http://localhost:9305
启动
移动端开发
bash
# 添加 iOS 平台
pnpm ios:add
# 添加 Android 平台
pnpm android:add
# 构建并打开 iOS 项目
pnpm ios
# 构建并打开 Android 项目
pnpm android
项目结构
my-mobile-app/
├── public/ # 静态资源
├── src/
│ ├── assets/ # 资源文件
│ │ └── images/
│ │ ├── capacitor.svg
│ │ └── vue.svg
│ ├── locales/ # 国际化文件
│ │ ├── index.ts # i18n 配置
│ │ ├── zh_CN.ts # 中文语言包
│ │ └── en_US.ts # 英文语言包
│ ├── router/ # 路由配置
│ │ ├── index.ts # 路由入口
│ │ └── routes.ts # 路由定义
│ ├── views/ # 页面组件
│ │ ├── demo/ # 演示页面
│ │ ├── docs/ # 文档页面
│ │ ├── empty/ # 空页面
│ │ └── index/ # 首页
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── ios/ # iOS 原生项目
├── android/ # Android 原生项目
├── capacitor.config.json # Capacitor 配置
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
└── vite.config.js # Vite 配置
核心特性
🎯 TypeScript 支持
完整的 TypeScript 支持,提供类型安全和智能提示:
typescript
// 组件中使用 TypeScript
<script setup lang="ts">
interface User {
id: number;
name: string;
email: string;
}
const user = ref<User>({
id: 1,
name: 'John Doe',
email: 'john@example.com'
});
</script>
📱 跨平台移动开发
基于 Capacitor 的跨平台开发:
- iOS - 完整的 iOS 平台支持
- Android - 完整的 Android 平台支持
- Web - 现代浏览器支持
- PWA - 渐进式 Web 应用
🎨 响应式设计
基于 Tailwind CSS 的现代化 UI:
vue
<template>
<div class="container mx-auto px-4 py-8">
<h1 class="text-3xl font-bold text-blue-600">
{{ title }}
</h1>
</div>
</template>
<style lang="scss" scoped>
.container {
@apply bg-white rounded-lg shadow-md;
}
</style>
🌍 多语言支持
内置完整的多语言支持:
vue
<template>
<div>
<h1>{{ t('page.title') }}</h1>
<p>{{ t('page.description') }}</p>
</div>
</template>
<script setup lang="ts">
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
</script>
🛣️ 路由管理
基于 Vue Router 的路由系统:
typescript
// router/routes.ts
export const routes = [
{
path: '/',
name: 'Home',
component: () => import('@/views/index/Index.vue'),
},
{
path: '/demo',
name: 'Demo',
component: () => import('@/views/demo/Demo.vue'),
},
];
🏪 状态管理
使用 Pinia 进行状态管理:
typescript
// stores/demo.ts
import { defineStore } from 'pinia';
export const useDemoStore = defineStore('demo', () => {
const count = ref(0);
const increment = () => {
count.value++;
};
return {
count,
increment,
};
});
开发工具
代码质量
- ESLint - 代码质量检查
- Prettier - 代码格式化
- TypeScript - 类型检查
开发命令
bash
# 开发服务器
pnpm dev
# 构建项目
pnpm build
# 代码质量
pnpm lint
pnpm lint:fix
# 代码格式化
pnpm format
pnpm format:check
# 移动端开发
pnpm ios:add # 添加 iOS 平台
pnpm ios:build # 构建并同步到 iOS
pnpm ios:open # 打开 iOS 项目
pnpm ios # 一键构建并打开 iOS
pnpm android:add # 添加 Android 平台
pnpm android:build # 构建并同步到 Android
pnpm android:open # 打开 Android 项目
pnpm android # 一键构建并打开 Android
热重载
Capacitor 提供极速的热重载体验:
- 修改 Vue 文件时自动刷新
- 修改样式文件时热更新
- 保持应用状态
原生功能
Capacitor 插件
使用 Capacitor 插件访问原生功能:
typescript
import { Camera } from '@capacitor/camera';
import { SplashScreen } from '@capacitor/splash-screen';
// 相机功能
const takePicture = async () => {
const image = await Camera.getPhoto({
quality: 90,
allowEditing: true,
resultType: CameraResultType.Uri,
});
return image.webPath;
};
// 启动屏幕
const hideSplash = async () => {
await SplashScreen.hide();
};
平台检测
检测当前运行平台:
typescript
import { Capacitor } from '@capacitor/core';
// 平台检测
const isNative = Capacitor.isNativePlatform();
const platform = Capacitor.getPlatform();
if (platform === 'ios') {
// iOS 特定代码
} else if (platform === 'android') {
// Android 特定代码
} else {
// Web 特定代码
}
原生 API 调用
调用原生 API:
typescript
import { Capacitor } from '@capacitor/core';
// 调用原生方法
const result = await Capacitor.Plugins.SomePlugin.someMethod({
key: 'value',
});
配置管理
Capacitor 配置
json
{
"appId": "com.example.app",
"appName": "capacitor",
"webDir": ".output",
"plugins": {
"SplashScreen": {
"launchAutoHide": false
}
}
}
环境配置
typescript
// 环境变量配置
const config = {
apiUrl: import.meta.env.VITE_API_URL || 'https://api.example.com',
appVersion: import.meta.env.VITE_APP_VERSION || '1.0.0',
};
最佳实践
移动端开发
- 使用触摸友好的交互设计
- 优化移动端性能
- 合理使用原生插件
- 适配不同屏幕尺寸
样式开发
- 优先使用 Tailwind CSS 类
- 使用移动端优化的单位
- 遵循移动端设计规范
- 考虑不同平台的差异
状态管理
- 使用 Pinia 进行状态管理
- 合理拆分 store
- 使用 TypeScript 定义类型
- 避免在组件中直接修改状态
性能优化
- 合理使用图片资源
- 避免过深的组件嵌套
- 使用懒加载优化路由
- 优化原生插件使用
部署
Web 部署
bash
# 构建 Web 版本
pnpm build
# 部署到静态服务器
# 将 .output 目录上传到服务器
移动端发布
iOS 发布
- 在 Xcode 中打开 iOS 项目
- 配置证书和签名
- 构建并上传到 App Store
Android 发布
- 在 Android Studio 中打开项目
- 生成签名 APK
- 上传到 Google Play Store
部署到 Vercel
Capacitor 应用可以部署到 Vercel。详细的部署配置和步骤请参考 Vercel 部署指南。