1.前期准备及前言
一般可以使用HBuilderX创建项目,为了本次博客的完整性,先讲解一下HBuilderX创建uniapp项目。下载开发工具地址:https://www.dcloud.io/hbuilderx.html。由于现在项目开发都是不同的人员配置进行开发,所以一般都在使用jenkins协作开发,所以我比较推荐yarn或咋npm命令建立项目,通过码云托管之后便可以实现自动部署服务器了。
2.HBuilderX工具创建项目
创建uni-app
在点击工具栏里的文件 -> 新建 -> 项目:
选择uni-app
类型,输入工程名,选择模板,点击创建,即可成功创建。
运行uni-app
-
浏览器运行:进入hello-uniapp项目,点击工具栏的运行 -> 运行到浏览器 -> 选择浏览器,即可在浏览器里面体验uni-app 的 H5 版。
发布uni-app
3.命令创建项目(通过vue-cli命令行)
1.全局安装vue-cli
npm install -g @vue/cli
2.创建uniapp项目
使用正式版(对应HBuilderX最新正式版)
vue create -p dcloudio/uni-preset-vue my-project
3.选择项目模板
4.运行/发布
npm run dev:%PLATFORM%
npm run build:%PLATFORM%
我基本上喜欢使用yarn来创建项目
给大家介绍一下yarn吧!!!!!!!!!!(网站:https://yarn.bootcss.com/)Yarn 对你的代码来说是一个包管理器。它可以让你使用并分享 全世界开发者的(例如 JavaScript)代码。 Yarn 能够快速、安全、 并可靠地完成这些工作,所以你不用有任何担心。
1.速度快
Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
2.超级安全
在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
3.可靠
使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。
怎么使用yarn
- 这里我使用的是 npm 的安装方式
npm install -g yarn
- 查看是否安装成功
yarn -v
- 常用命令
# 初始化一个项目
yarn init
# 装包
yarn add packagename
yarn add packagename --dev
# 更新包
yarn upgrade packagename
# 删除包
yarn remove packagename
# 安装所有包
yarn
yarn install
# 发布包
yarn publish
# 查看包的缓存列表
yarn cache list
# 全局安装包 == npm -g
yarn global
4.项目创建之后的环境配置
在项目创建完成之后会得到如下的目录结构
通过yarn生成了依赖node_modules而public是项目的入口
1.多环境配置
uniapp其实和vue一样都是可以多环境配置的,我们来看一下具体操作步骤吧!
在刚刚创建的项目下创建一个文件夹创建一个js文件
里面包含服务器请求地址配置(1)线上环境使用production区分,则其他情况下都属于线下环境
export function objApi(){
let objTo = {}
if (process.env.NODE_ENV === 'production') {
objTo.ApiURL = 'https://h5.xxxxx.com'
objTo.BASE_URL = objTo.ApiURL + '/mop'
objTo.AppId = 'wxdcaeda296ace931a'
// 聊天线上
objTo.CHAT_URL = 'ws://h5.xxxxx.com'
return objTo
} else {
objTo.ApiURL = 'http://xxxxx.natapp1.cc'
objTo.BASE_URL = '/mop'
objTo.AppId = 'wx34bc5cd3b4385f1b'
// 聊天测试
objTo.CHAT_URL = 'ws://xxxxx.natapp1.cc'
return objTo
}
}
部署方式改变:
因为加上了多环境配置,所以部署方式也得改变一下,部署线上的时候不改变
直接使用yarn build:h5(如果是h5项目的话)
测试环境配置:
1.首先我们在项目里面找到package.json这个文件
2.修改文件的部署信息
"build:h5-t": "cross-env NODE_ENV=test UNI_PLATFORM=h5 vue-cli-service uni-build",
部署命令:yarn build:h5-t
2.跨域配置
1.在项目里面找到manifest.json文件
2.如果是h5的情况下加上如下代码:
"h5": {
"devServer": {
"port": 8000,
"disableHostCheck": true,
"proxy": {
"/mop": {
"target": "http://xxx.natapp1.cc",
"changeOrigin": true,
"secure": false
}
}
}
}
3.路由配置
找到page.json文件
{
"path": "pages/tab/index",
"style": {
"navigationBarTitleText": "首页",
"navigationBarBackgroundColor":"#FFD912",
"navigationBarTextStyle":"black",
"enablePullDownRefresh": true,
"onReachBottomDistance":50,
"app-plus": {
"titleNView": false ,//禁用原生导航栏
"softinputNavBar":"none"
}
}
},
4.请求封装
在项目下新建一个文件夹fetchjs封装
/**
* uniapp请求方式封装
*/
import { md5 } from '@/common/tools/md5.js'
import { objApi } from '@/common/fetch/baseUrl/baseApi.js'
import { isWechat } from '@/common/tools/wxshare.js'
const secretKey ='hskjfhsjkfh@1$'//加密字符串
const version = '1.0.0'//版本号
//请求封装
export function fetch(url,params,type='GET',header,async=false){
if(header.typeof == null){
let dataTime = undefined
let strTime = undefined
let token = undefined
dataTime = new Date().getTime();
strTime = secretKey+dataTime;
if(isWechat()){
header = {
'sign':md5.hex_md5(strTime).toUpperCase(),
'timestamp':dataTime,
'userId':uni.getStorageSync('userId'),
'version':version,
'bizCodeEnum':'WX'
}
}else{
header = {
'sign':md5.hex_md5(strTime).toUpperCase(),
'timestamp':dataTime,
'userId':uni.getStorageSync('userId'),
'version':version,
'bizCodeEnum':'H5'
}
}
}
return new Promise((resolve,reject) => {
uni.showLoading({
title: '加载中'
})
uni.request({
url: objApi().BASE_URL+url,
data: params,
method: type,
dataType: "json",
header: header,
success: (res) => {
uni.hideLoading()
if(res.data.code === 20000 && res.data.success){
resolve(res)
reject(0)
} else if (res.data.code === 10001) {
uni.navigateTo({
url: '/pages/login/index?type=1'
})
} else if (res.data.code === 40001) { // 系统错误
uni.redirectTo({
url: '/pages/null/index?type=1'
})
} else {
uni.showToast({
title: res.data.message,
icon:'none',
duration: 2000
})
resolve(res)
reject(1) // 错误返回
}
},
fail: () => {
uni.hideLoading()
reject(1)//网络异常回调
resolve(1)
uni.showToast({
title:'请求失败',
icon:'none',
duration: 2000
})
}
})
})
}
export function uploadFile(url,tempFilePaths,formData,header) {
if(header === undefined){
let dataTime = undefined
let strTime = undefined
let token = undefined
dataTime = new Date().getTime();
strTime = secretKey+dataTime;
if(isWechat()){
header = {
'sign':md5.hex_md5(strTime).toUpperCase(),
'timestamp':dataTime,
'userId':uni.getStorageSync('userId'),
'version':version,
'bizCodeEnum':'WX'
}
}else{
header = {
'sign':md5.hex_md5(strTime).toUpperCase(),
'timestamp':dataTime,
'userId':uni.getStorageSync('userId'),
'version':version,
'bizCodeEnum':'H5'
}
}
}
return new Promise((resolve,reject) => {
uni.showLoading({
title: '加载中'
})
uni.uploadFile({
url: objApi().BASE_URL+url,
filePath: tempFilePaths,
name: 'file',
header: header,
formData: formData,
success: (uploadFileRes) => {
uni.hideLoading()
resolve(JSON.parse(uploadFileRes.data))
reject(0)
},
fail:(err) => {
uni.hideLoading()
resolve(err)
reject(1)
},
})
})
}
各位小伙伴们,基本上一个项目就这样在搭建完成了,现在就可以去进行把玩uniapp了