前期准备
技术栈
搭建项目并完成初始化 使用 CLI 搭建项目)
全局安装 vue-cli 3.x(如已安装请跳过此步骤)
# 安装稳定最新版npm install -g @vue/cliyarn global add @vue/cli# 安装指定版本npm install -g @vue/cli@3.x.xyarn global add @vue/cli@3.x.x# 查看版本号vue --versionvue -V
通过 CLI 创建 uni-app 项目
# <name> 输入项目名vue create -p dcloudio/uni-preset-vue uni-loan-mate-platform
等待下载,之后会提示选择项目模板,选择 默认模板(TypeScript) 项目模板,如下所示:
选择后等待项目下载完成。
运行、发布uni-app
npm run dev:%PLATFORM%npm run build:%PLATFORM%
%PLATFORM% 可取值如下:
| 值 | 平台 |
|---|---|
| app-plus | app平台生成打包资源(支持npm run build:app-plus,可用于持续集成。不支持run,运行调试仍需在HBuilderX中操作) |
| h5 | H5 |
| mp-alipay | 支付宝小程序 |
| mp-baidu | 百度小程序 |
| mp-weixin | 微信小程序 |
| mp-toutiao | 字节跳动小程序 |
| mp-qq | qq 小程序 |
| mp-360 | 360 小程序 |
| quickapp-webview | 快应用(webview) |
| quickapp-webview-union | 快应用联盟 |
| quickapp-webview-huawei | 快应用华为 |
可以自定义更多条件编译平台,比如钉钉小程序,参考package.json文档。
修改.vue文件组件为基于类的vue组件
// App.vue<script lang="ts">import { Vue } from 'vue-property-decorator'export default Vue.extend({mpType: 'app',onLaunch() {console.log('App Launch')},onShow() {console.log('App Show')},onHide() {console.log('App Hide')}});</script>
Tips
- App.vue文件不能修改为基于类的Vue组件;
- uni-app申明文件采用命名空间方式编写,使用方式: UniApp.xxxx;
App.vue 文件在 $mount() 挂载Vue实例中注入
// main.ts 入口文件import { Vue } from 'vue-property-decorator'import App from './App.vue'Vue.config.productionTip = falseconst app = new Vue({render: h => h(App)})app.$mount() //挂载Vue实例
基于类的vue组件
<script lang="ts">import { Vue, Component } from 'vue-property-decorator'@Component({})export default class Index extends Vue {// 初始数据可以直接声明为实例的 propertytitle: string = 'Hello!'// 组件方法也可以直接声明为实例的方法onClick (): void {window.alert(this.title)}}</script>
uni-app 初始化目录结构
#整体结构┌─public│ └─index.html│─src 代码编辑区│ └─**** 查看下方src文件夹下目录结构├─typings .d.ts 申明文件存放目录├─.gitignore git 过滤文件├─babel.config.js babel 编译配置文件├─postcss.congfig.js css处理器配置文件└─tsconfig.json TS 编译配置文件#src文件夹下目录┌─apis 请求数据接口├─common 公共文件(static中不编译js(ES6)文件,可以放在该目录下)│ └─css│ └─reset.scss scss文件│─components 符合vue组件规范的uni-app组件目录│ └─comp-a.vue 可复用的a组件├─pages 业务页面文件存放的目录│ ├─index│ │ └─index.vue index页面│ └─subpackages 分包优化├─static 存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此│ ├─images│ │ ├─tabbar│ │ │ └─icon.png tabBar 需要的图片资源├─store vuex 状态管理├─utils 工具文件存在在该目录下│ ├─dataTime 对时间的处理│ ├─request 请求封装│ └─wxsdk 微信SDK封装├─main.ts Vue初始化入口文件├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期├─manifest.json 配置应用名称、appid、logo、版本等打包信息├─pages.json 配置页面路由、导航条、选项卡等页面类信息└─uni.scss uni 提供的默认变量
可以自定义目录,根据项目需求,参考uni-app文档。
附录:
tyconfig.json 配置
{"compilerOptions": {"target": "esnext","module": "esnext","strict": true,"jsx": "preserve","importHelpers": true,"moduleResolution": "node","esModuleInterop": true,"allowSyntheticDefaultImports": true,"experimentalDecorators":true,"sourceMap": true,"skipLibCheck": true,"baseUrl": ".","typeRoots" : ["./typings"],"types": ["webpack-env","@dcloudio/types","miniprogram-api-typings","mini-types"],"paths": {"@/*": ["./src/*"]},"lib": ["esnext","dom","dom.iterable","scripthost"]},"exclude": ["node_modules","unpackage","src/**/*.nvue"]}
reset.scss 初始化样式文件
page {font-size: 28rpx;line-height: 1.5;color: #2c3e50;background: #fff;-webkit-overflow-scrolling: touch; /* 使 ios 列表滑动流畅 */}button {color: #333;}page,view,input,text,form,navigator,rich-text,picker,scroll-view,cover-view,open-data{box-sizing: border-box;}rick-text,open-data,form {display: block;}cover-view {line-height: 1.5;white-space: nowrap;}/* 隐藏滚动条 */::-webkit-scrollbar{display: none;}button:after{border: 0;}/* 清除浮动 */.clearfix:after {content: '.';display: block;height: 0;clear: both;visibility: hidden;}
文件来源于 @京城一灯
参考资料:
uni-app官方文档
DCloud 问答社区:当 uni-app 遇见 vscode
搭建 uni-app ts 项目
Vue2.x TypeScript 支持
