# h5-template **Repository Path**: qrqy/h5-template ## Basic Information - **Project Name**: h5-template - **Description**: 基于 vite2 + Vue3.2 + TypeScript + pinia + mock + sass + vantUI + viewport 适配 + axios 封装 的基础模版 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-11 - **Last Updated**: 2024-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 🎉 基于 vite2 + Vue3.2 + TypeScript + pinia + mock + sass + vantUI + viewport 适配 + axios 封装 的基础模版 本示例 Node.js v17.2.0 ## 项目安装/启动 - 本项目采用 pnpm 包管理器,如果没有请先安装 pnpm - 使用其他包管理器请删除 `pnpm-lock.yaml` ```js npm i -g pnpm // 全局安装 pnpm pnpm install // 安装依赖 pnpm dev // 开发 pnpm build // 打包 pnpm preview // 本地预览打包的项目 ``` # 目录 - [√ 使用 create-vue 初始化项目](#createVue) - [√ 配置 ip 访问项目](#ip) - [√ 配置多环境变量](#env) - [√ 配置 alias 别名](#alias) - [√ Sass 全局样式](#sass) - [√ Vue-router](#router) - [√ Pinia 状态管理](#pinia) - [√ 使用 Mock 数据](#mock) - [√ 配置 proxy 跨域](#proxy) - [√ 静态资源使用](#static) - [√ Axios 封装及接口管理](#axios) - [√ vue-request 管理接口](#vueRequest) - [√ 自动导入](#unplugin) - [√ VantUI 组件按需加载](#vant) - [√ viewport 适配方案](#viewport) - [√ 适配苹果底部安全距离](#phonex) - [√ 动态设置 title](#dyntitle) - [√ 配置 Jssdk](#jssdk) - [√ Eslint + Prettier 统一开发规范](#prettier) - [√ husky + lint-staged 提交校验](#husky) - [√ 项目打包优化](#build) ## ✅ 使用 create-vue 初始化项目 - 文档:https://github.com/vuejs/create-vue - 如果想从 0 到 1 手动搭建基于 vite 的基础模版,可查看[vite-vue3-template](https://github.com/ynzy/vite-vue3-template)
createVue
```js npm init vue@3 Vue.js - The Progressive JavaScript Framework ✔ Project name: … vite-vue3-h5-template ✔ Add TypeScript? … Yes ✔ Add JSX Support? … Yes ✔ Add Vue Router for Single Page Application development? … Yes ✔ Add Pinia for state management? … Yes ✔ Add Cypress for testing? … No ✔ Add ESLint for code quality? … Yes ✔ Add Prettier for code formatting? … Yes ```
- 初始化项目包含 - Vite - Vue3.2 - Vue-router4 - TypeScript - Jsx - Pinia - Eslint - Prettier - @types/node // 识别 nodejs 内置模块 [▲ 回顶部](#top) ## ✅ 配置 ip 访问项目 - vite 启动后出现 “ Network: use --host to expose ” ```js vite v2.3.7 dev server running at: > Local: http://localhost:3000/ > Network: use `--host` to expose ``` - 是因为 IP 没有做配置,所以不能从 IP 启动,需要在 vite.config.js 做相应配置: 在 vite.config.js 中添加 server.host 为 0.0.0.0 ```js export default defineConfig({ plugins: [vue()], // 在文件中添加以下内容 server: { host: '0.0.0.0' } }) ``` - 重新启动后显示 ```js vite v2.3.7 dev server running at: > Local: http://localhost:3000/ > Network: http://192.168.199.127:3000/ ``` [▲ 回顶部](#top) ## ✅ 配置多环境变量 - 文档:https://cn.vitejs.dev/guide/env-and-mode.html * 在生产环境,会把 import.meta.env 的值转换成对应真正的值 1. 添加环境变量文件,每个文件写入配置,**定义 env 环境变量前面必须加 VITE\_** - `.env.development` ```js # must start with VITE_ VITE_ENV = 'development' VITE_OUTPUT_DIR = 'dev' ``` - `.env.production` ```js # must start with VITE_ VITE_ENV = 'production' VITE_OUTPUT_DIR = 'dist' ``` - `.env.test` ```js # must start with VITE_ VITE_ENV = 'test' VITE_OUTPUT_DIR = 'test' ``` 2. 修改 scripts 命令 - `--mode` 用来识别我们的环境 ```js "dev": "vite --mode development", "test": "vite --mode test", "prod": "vite --mode production", ``` 3. 在项目中访问 ```js console.log(import.meta.env) ``` 4. typescript 智能提示 - 修改 `src/env.d.ts` 文件,如果没有创建一个 ```js /// interface ImportMetaEnv extends Readonly> { readonly VITE_ENV: string; // 环境 readonly VITE_OUTPUT_DIR: string; // 打包目录 } interface ImportMeta { readonly env: ImportMetaEnv; } ``` ### 动态导入环境配置 ```ts // config/env.development.ts // 本地环境配置 export default { env: 'development', mock: true, title: '开发', baseUrl: 'http://localhost:9018', // 项目地址 baseApi: 'https://test.xxx.com/api', // 本地api请求地址,注意:如果你使用了代理,请设置成'/' APPID: 'wx9790364d20b47d95', APPSECRET: 'xxx', $cdn: 'https://imgs.solui.cn' } ``` ```ts // config/index.ts export interface IConfig { env: string // 开发环境 mock?: string // mock数据 title: string // 项目title baseUrl?: string // 项目地址 baseApi?: string // api请求地址 APPID?: string // 公众号appId 一般放在服务器端 APPSECRET?: string // 公众号appScript 一般放在服务器端 $cdn: string // cdn公共资源路径 } const envMap = {} const globalModules = import.meta.globEager('./*.ts') Object.entries(globalModules).forEach(([key, value]) => { // key.match(/\.\/env\.(\S*)\.ts/) const name = key.replace(/\.\/env\.(.*)\.ts$/, '$1') envMap[name] = value }) // 根据环境引入不同配置 export const config = envMap[import.meta.env.VITE_ENV].default console.log('根据环境引入不同配置', config) ``` [▲ 回顶部](#top) ## ✅ 配置 alias 别名 - 项目初始化已经配置好了一个 src 别名 ```js import { fileURLToPath } from 'url' resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, ``` [▲ 回顶部](#top) ## ✅ Sass 全局样式 - 文档:https://cn.vitejs.dev/guide/features.html#css-pre-processors 1. 安装依赖 使用`dart-sass`, 安装速度比较快,大概率不会出现安装不成功 ```js pnpm i -D sass ``` 2. 使用 每个页面自己对应的样式都写在自己的 .vue 文件之中 `scoped` 它顾名思义给 css 加了一个域的概念。 ```html ``` ### css modules - 目前测试只有在 tsx 中可以正常使用,vue-template 中可以导入在 js 中使用,`