uniapp如何创建项目详细介绍,多环境配置、路由配置、代理配置、请求封装等。完整的搭建一个项目环境。

本文详细介绍了如何使用HBuilderX和vue-cli创建uniapp项目,包括环境配置、跨域设置、路由管理和请求封装。推荐使用yarn进行项目管理,并提供了多环境配置的步骤,帮助开发者顺利搭建uniapp项目环境。
摘要由CSDN通过智能技术生成

1.前期准备及前言

一般可以使用HBuilderX创建项目,为了本次博客的完整性,先讲解一下HBuilderX创建uniapp项目。下载开发工具地址:https://www.dcloud.io/hbuilderx.html。由于现在项目开发都是不同的人员配置进行开发,所以一般都在使用jenkins协作开发,所以我比较推荐yarn或咋npm命令建立项目,通过码云托管之后便可以实现自动部署服务器了。

2.HBuilderX工具创建项目

创建uni-app

在点击工具栏里的文件 -> 新建 -> 项目:

选择uni-app类型,输入工程名,选择模板,点击创建,即可成功创建。

运行uni-app

  1. 浏览器运行:进入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了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值