创建uni-app项目

有两种方式创建uni-app项目:

  1. 通过HBuildX可视化界面创建
  2. 通过vue-cli命令行创建

这里主要介绍通过vue-cli命令行创建uni-app项目及项目配置的过程。

1
2
3
4
5
6
7
8
9
10
11
# 安装环境
1. node 版本 16+
2. pnpm 版本 8.x

# 安装vue-cli
npm i -g @vue/cli

#创建项目
npx degit dcloudio/uni-preset-vue#vite 项目名称
# vite + ts
npx degit dcloudio/uni-preset-vue#vite-ts 项目名称

注意:如命令行创建失败,请直接访问 gitee 下载模板

更多的注意安装流程和注意事项可以参考官网:uni-app官网

基础项目结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
├── index.html
├── package.json
├── shims-uni.d.ts
├── src
│   ├── App.vue
│   ├── env.d.ts
│   ├── main.ts
│   ├── manifest.json
│   ├── pages
│   │   └── index
│   │   └── index.vue
│   ├── pages.json
│   ├── shime-uni.d.ts
│   ├── static
│   │   └── logo.png
│   └── uni.scss
├── tsconfig.json
└── vite.config.ts

运行项目

安装项目依赖

1
pnpm i

运行项目

根据项目需求运行对应环境的脚本命令,这里演示微信小程序

1
pnpm dev:mp-weixin

运行完项目后,目录会生成dist文件夹,里面的dev中mp-weixin文件则是用于运行编译的文件

导入微信开发者工具

在运行项目完成后,按照提示运行方式:打开微信开发者工具, 导入 dist\dev\mp-weixin 运行,此时可以在微信开发者工具调试项目;

vscode 开发需要安装的插件

  • uni-create-view (不强制推荐)
  • uni-helper (强烈建议安装)
  • uniapp 小程序扩展 (强烈建议安装)

安装类型声明文件

1
pnpm add @types/wechat-miniprogram @uni-helper/uni-app-types -D

配置 tsconfig.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
"extends": "@vue/tsconfig/tsconfig.json",
"compilerOptions": {
"sourceMap": true,
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
},
"lib": [
"esnext",
"dom"
],
"types": [
"@dcloudio/types",
"@types/wechat-miniprogram",
"@uni-helper/uni-app-types"
],
"ignoreDeprecations": "5.0" // 添加这个选项来忽略废弃警告
},
"vueCompilerOptions": {
"nativeTags": [
"block",
"component",
"template",
"slot"
]
},
"include": [
"src/**/*.ts",
"src/**/*.d.ts",
"src/**/*.tsx",
"src/**/*.vue"
]
}

安装官方uni-ui框架

关于 ui 框架强烈建议使用官方 uni-ui 不推荐使用其他 ui 框架

安装

1
2
3
4
5
#安装 sass
pnpm i sass -D

# 安装 uni-ui
pnpm i @dcloudio/uni-ui

配置 easycom 节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// pages.json
{
"easycom": {
"autoscan": true,
"custom": {
// uni-ui 规则如下配置
"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
}
},

// 其他内容
"pages": [
// ...
]
}

使用组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!--
* @Description:
* @Author: xiuji
* @Date: 2023-08-25 19:45:55
* @LastEditTime: 2023-10-20 15:42:08
* @LastEditors: Do not edit
-->
<template>
<view class="content">
<image class="logo" src="/static/logo.png" />
<view class="text-area">
<text class="title">{{ title }}</text>
</view>
<view>
<!-- uni-ui组件 -->
<uni-number-box v-model="age" @change="changeValue" />
</view>
</view>
</template>

<script lang="ts">
import { ref } from 'vue'
export default {
setup() {
const title = ref('Hello')
const age = ref(0)
const changeValue = (e: number) => {
console.log(e)
}
return {
title,
age,
changeValue
}
}
}
const title = ref('Hello')
</script>

<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}

.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}

.text-area {
display: flex;
justify-content: center;
}

.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>

此时已经能正常使用

添加 uni-ui 组件类型

1
pnpm add @uni-helper/uni-ui-types -D

配置TS类型

在 tsconfig.json 中配置在 types 内

1
2
3
4
5
6
"types": [
"@dcloudio/types",
"@types/wechat-miniprogram",
"@uni-helper/uni-app-types",
"@uni-helper/uni-ui-types"
]

注意:下载最新的组件目前仅支持 uni_modules ,非 uni_modules 版本最高支持到组件的1.2.10版本

安装unocss

Unocss——即时按需的原子级CSS引擎

安装Vite插件

Vite 插件随 unocss 包一起提供。

1
2
3
4
5
# 安装
pnpm add -D unocss

# unocss 小程序预设
pnpm add -D unocss-preset-weapp

安装插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
* @Description:
* @Author: xiuji
* @Date: 2023-08-25 19:45:55
* @LastEditTime: 2023-10-20 16:02:49
* @LastEditors: Do not edit
*/
import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
import UnoCSS from "unocss/vite";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [uni(), UnoCSS()],
});

创建一个 uno.config.ts 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import presetWeapp from 'unocss-preset-weapp'
import { transformerAttributify, transformerClass } from 'unocss-preset-weapp/transformer'
import { defineConfig } from 'unocss'

export default defineConfig({
presets: [
// https://github.com/MellowCo/unocss-preset-weapp
presetWeapp(),
],
shortcuts: [
{
'border-base': 'border border-[#eee]',
'flex-center': 'flex justify-center items-center',
'text-c1': 'text-[#181818]',
'text-c2': 'text-[#333333]',
'text-c3': 'text-[#B2B2B2]',
'text-c4': 'text-[#CCCCCC]',
'bg': 'bg-[#f6f7fb]',
},
],
transformers: [
// https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerAttributify
transformerAttributify(),

// https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerClass
transformerClass(),
],
})

virtual:uno.css 添加到的主入口文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
* @Description:
* @Author: xiuji
* @Date: 2023-08-25 19:45:55
* @LastEditTime: 2023-10-20 16:03:50
* @LastEditors: Do not edit
*/
import { createSSRApp } from "vue";
import App from "./App.vue";
import 'virtual:uno.css' // unocss
export function createApp() {
const app = createSSRApp(App);
return {
app,
};
}

使用

  • 强烈建议Vscode安装Unocss插件
1
2
3
4
5
<!-- 添加对应规则类名m-5 -->
<view class="m-5">
<!-- uni-ui组件 -->
<uni-number-box v-model="age" @change="changeValue" />
</view>

效果如下:

增加 pinia 依赖和 pinia 持久化依赖

安装pinia、pinia-plugin-persistedstate

1
2
3
4
# pinia
pnpm i pinia@2.0.36
# pinia-plugin-persistedstate数据持久化插件
pnpm i pinia-plugin-persistedstate

注意:pinia2.1以上版本需要vue3.3才能使用,建议锁定pinia版本

新建store文件夹

新建index.ts文件

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
* @Description:
* @Author: xiuji
* @Date: 2023-10-20 16:42:35
* @LastEditTime: 2023-10-20 16:47:16
* @LastEditors: Do not edit
*/
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
export const pinia = createPinia();
pinia.use(piniaPluginPersistedstate); // 数据持久化

export * from './modules/user'

使用pinia及数据持久化插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// user.ts
/*
* @Description:
* @Author: xiuji
* @Date: 2023-10-20 16:43:20
* @LastEditTime: 2023-10-20 16:53:46
* @LastEditors: Do not edit
*/
import { defineStore } from 'pinia'

export const useUserStore = defineStore(
'pinia-user',
() => {
const state = {
name: 'pinia'
}

const setName = (name: string) => {
state.name = name
}

return {
state,
setName
}
},
{
// pinia-user内部的state默认都会数据持久化
persist: true
}
)

pinia-plugin-persistedstate详细的配置文件自行查阅文档。

总结

本uni-app基座基于vite4+vue3+pinia搭建,开箱即用,具体业务开发可参照uni-app官方文档

源码地址:https://github.com/Terminator957/Uniapp-miniprogram