uni-app+vue3+vite+微信小程序开发的问题点

这篇具有很好参考价值的文章主要介绍了uni-app+vue3+vite+微信小程序开发的问题点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 目录名称不能为api,否则会出现├F10: PM┤ [vite] getaddrinfo ENOTFOUND rivtrust.jz-xxx.xyz,修改为_api;
  2. vue3的全局变量挂载
import {
  createSSRApp
} from 'vue'

const app = createSSRApp(App)
app.config.globalProperties.$interface = $interface

或者

import {
  createSSRApp
} from 'vue'

const app = createSSRApp(App)
// 配置全局变量 页面中使用 inject 接收
app.provide('global', {
  $interface
})
  1. 全局变量的引入:
import { getCurrentInstance } from 'vue'

const { proxy } = getCurrentInstance()
proxy.$interface.wxLogin({
	name: 'william'
})

或者

import { inject } from 'vue'

// 获取全局对象
const global= inject('global')
global.$interface.wxLogin({
	name: 'william'
})
  1. axios在微信小程序上使用的问题:
    安装模块
npm i -S axios

出现adapter is not a function的解决方法

TypeError: adapter is not a function

需要axios自定义适配器配置

import settle from "axios/lib/core/settle"
import buildURL from "axios/lib/helpers/buildURL"
/* 格式化路径 */
const URLFormat = function(baseURL, url) {
	return url.startsWith("http") ? url : baseURL
}
/* axios适配器配置 */
const adapter = function(config) {
	return new Promise((resolve, reject) => {
		uni.request({
			method: config.method.toUpperCase(),
			url: buildURL(URLFormat(config.baseURL, config.url), config.params, config
				.paramsSerializer),
			header: config.headers,
			data: config.data,
			dataType: config.dataType,
			responseType: config.responseType,
			sslVerify: config.sslVerify,
			complete: function complete(response) {
				response = {
					data: response.data,
					status: response.statusCode,
					errMsg: response.errMsg,
					header: response.header,
					config: config
				};
				settle(resolve, reject, response);
			}
		})
	})
}

export default adapter;

整体代码request.js:

import axios from 'axios'
import statusCode from './statusCode'
import adapter from "./_adapter.js"

// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项,表示请求URL公共部分
	baseURL: process.env.VUE_APP_BASE_URL,
	// 超时(毫秒)
	timeout: 10000
})
service.defaults.adapter = adapter;
service.defaults.retry = 5; // 设置请求次数
service.defaults.retryDelay = 1000; // 重新请求时间间隔

// request拦截器
service.interceptors.request.use(config => {
	console.log("axios请求拦截器", config)
	config.headers['x-requested-width'] = 'XMLHttpRequest';
	config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
	// 'application/json;charset=utf-8'
	// 是否需要设置 token
	const isToken = config.Authorization === undefined || config.Authorization
	if (isToken) {
		const cookie = uni.getStorageSync('Authorization');
		// 让每个请求携带自定义token 请根据实际情况自行修改
		config.headers['Authorization'] = config.headers.Authorization || cookie;
	}
	config.params = {
		...config.params,
		_t: +new Date()
	}

	return config
}, error => {
	console.log(error)
	Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
		console.log("axios响应拦截器", res)
		// 未设置状态码则默认成功状态
		const code = res.data.code || 200
		// 获取错误信息
		const msg = statusCode[code] || res.data.msg || statusCode['default']
		// 二进制数据则直接返回
		if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
			return res.data
		}
		if (code === 401) {
			return Promise.reject('(401):请求要求身份验证。对于需要登录的网页,服务器可能返回此响应')
		} else if (code === 500) {
			uni.showToast({
				title: msg,
				duration: 2000
			});
			return Promise.reject(new Error(msg))
		} else if (code !== 200) {
			uni.showToast({
				title: msg,
				duration: 2000
			});
			return Promise.reject('error')
		} else {
			return res.data
		}
	},
	error => {
		console.log('err' + error)
		let {
			message
		} = error
		if (message == 'Network Error') {
			message = '后端接口连接异常'
		} else if (message.includes('timeout')) {
			message = '系统接口请求超时'
		} else if (message.includes('Request failed with status code')) {
			message = '系统接口' + message.substr(message.length - 3) + '异常'
		}
		uni.showToast({
			title: message,
			duration: 2000,
			icon: 'error'
		});
		return Promise.reject(error)
	}
)

export default service
  1. uni-app多环境配置
  • uni-app 项目中配置环境变量主要有如下三种方式:
    1. vue-config.js
    2. package.json
    3. .env
  • 在文件package.json设置以下内容
    如果项目跟目录下没有这个文件的话,可以执行 npm init -y生成该文件
  • 注意:package.json文件内不能有注释,否则配置无效,会编译失败
{
   ......
   "uni-app": {
		"scripts": {
			"h5dev": {
				"title": "h5开发版",
				"browser": "chrome",
				"env": {
					"UNI_PLATFORM": "h5",
					"VUE_APP_BASE_URL": "http://127.0.0.1:h5dev/",
					"MY_TEST": "dev-variable"
				},
				"define": {
					"H5-DEV_DEV": true
				}
			},
			"h5test": {
				"title": "h5测试版",
				"browser": "chrome",
				"env": {
					"UNI_PLATFORM": "h5",
					"VUE_APP_BASE_URL": "http://127.0.0.1:h5test/",
					"MY_TEST": "test-variable"
				},
				"define": {
					"H5-TEST": true
				}
			},
			"h5prod": {
				"title": "h5生产版",
				"browser": "chrome",
				"env": {
					"UNI_PLATFORM": "h5",
					"VUE_APP_BASE_URL": "http://127.0.0.1:h5prod/"
				},
				"define": {
					"H5-PROD": true
				}
			},
			"mp-weixin-dev": {
				"title": "微信开发版",
				"env": {
					"UNI_PLATFORM": "mp-weixin",
					"VUE_APP_BASE_URL": "http://127.0.0.1:mp-weixin-dev/"
				},
				"define": {
					"MP-WEIXIN-DEV": true
				}
			},
			"mp-weixin-test": {
				"title": "微信测试版",
				"env": {
					"UNI_PLATFORM": "mp-weixin",
					"VUE_APP_BASE_URL": "http://127.0.0.1:mp-weixin-test/"
				},
				"define": {
					"MP-WEIXIN-TEST": true
				}
			},
			"mp-weixin-prod": {
				"title": "微信生产版",
				"env": {
					"UNI_PLATFORM": "mp-weixin",
					"VUE_APP_BASE_URL": "http://127.0.0.1:mp-weixin-prod/"
				},
				"define": {
					"MP-WEIXIN-PROD": true
				}
			}
		}
	}
}

使用场景:可以使用官方的条件编译

// Vue3 非H5端,应直接访问 process.env.* 获取环境变量,不支持访问 process
// #ifdef H5-DEV
console.log('H5 开发环境', process.env, process.env.VUE_APP_BASE_URL)
// #endif
// #ifdef H5-TEST
console.log('H5 测试环境')
// #endif
// #ifdef MP-WEIXIN-DEV
console.log('微信小程序 开发环境', process.env.VUE_APP_BASE_URL)
// #endif
// #ifdef MP-WEIXIN-TEST
// 自定义微信测试环境下编译代码,其他环境下不会有这部分代码
console.log('微信小程序 测试环境')
// #endif

第二种方法,利用微信小程序的所处环境做判断:文章来源地址https://www.toymoban.com/news/detail-545716.html

// 获取当前帐号信息
const getBaseApi = (version = '', suffix = '') => {
	// 获取当前帐号信息
	const accountInfo = wx.getAccountInfoSync();
	let env = ""
	const baseApi = {
		// 开发版
		develop: "https://xxxxxxxx/sys",
		// 体验版
		trial: "https://xxxxxxxx/sys",
		// 正式版
		release: "https://xxxxxxxx/quotation"
	};
	// 当手机处于低版本的情况下,直接将地址写成开发版的
	let envVersion = accountInfo.miniProgram.envVersion
	if (!envVersion) {
		env = baseApi.release
	} else {
		env = version ? baseApi[version] : baseApi[envVersion];
	}
	return env + suffix;
}

export default getBaseApi

到了这里,关于uni-app+vue3+vite+微信小程序开发的问题点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架

    项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/uniapp-vue3-ts-scaffold 近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。但前台系统花样繁多

    2024年01月20日
    浏览(62)
  • 小程序-uni-app:uni-app-base项目基础配置及使用 / uni-app+vue3+ts+vite+vscode

    目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官网文档 微信开放文档 uni-app官网 二、创建项目 项目目标:vue3+ts+vite+vscode 创建以 typescript 开发的工程(如命令行创建失败,请直接访问 gitee 下载模板) npx degit dcloudio/uni-preset-vue#vite-ts uniapp-base ​ 本文创建成功 ​ 为了验

    2024年02月05日
    浏览(586)
  • 小程序-uni-app:uni-app-base项目基础配置及使用/uni-app+vue3+ts+vite+vscode

    目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官网文档 微信开放文档 uni-app官网 二、创建项目 项目目标:vue3+ts+vite+vscode 创建以 typescript 开发的工程(如命令行创建失败,请直接访问 gitee 下载模板) npx degit dcloudio/uni-preset-vue#vite-ts uniapp-base ​ 本文创建成功 ​ 为了验

    2024年02月15日
    浏览(95)
  • uni_app+vite+vue3+ts开发小程序,解决getUserProfile()获取用户信息问题

    最近开发小程序,开发环境uni_app+vue3等。在获取小程序平台用户信息是报错: {errMsg: \\\"getUserProfile:fail must be invoked by user tap gesture\\\", errNo: 21500} 我在抖音上查了下错误码: 看到这个解释也是瞬间无语了,然后在平台查找错误,找了半天终于在vue2 升级vue3文档里面找到解决办法

    2024年02月04日
    浏览(75)
  • uni-app(Vue3/Vite) + vant UI(Vue3版本)+ js 按需引入的项目搭建

            因为要完成软件工程的项目,要做一个nativeApp,看了很多的技术文档以后决定使用多端兼容的uni-app来开发。组件方面的话最后决定使用目前比较火的Vant UI。但是看了CSDN和掘金上面的很多文章,似乎没有一篇是关于uni-app中使用Vite对vant组件进行按需引入(可能这个

    2023年04月09日
    浏览(68)
  • 微信小程序开发学习笔记《17》uni-app框架-tabBar

    博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 运行如下的命令,基于master分支在本地创建tabBar子分支,用来开发和tabBar相关的功能: 在 pages目录中,创建首页(home)、分类(cate)、购物车(cart)、我的(my)这4个

    2024年02月20日
    浏览(72)
  • 1个月uni-app微信小程序开发上线实战专栏介绍

    《uni-app开发微信小程序1个月上线实战》,目标带领1000位同学成功开发上线一个自己的个人小程序! 作者介绍 :国服第二切图仔——资深前端开发工程师,具有六年以上的前端开发经验,曾在多家知名企业任职,CSDN、阿里云、华为云等平台优质创作者,擅长前端性能优化,

    2023年04月16日
    浏览(57)
  • 记录uni-app + vue3 + vite + uni-ui 小程序出现 Invalid pattern 的报错处理

    登录 - Gitee.com uni-ui 现在只推荐使用 easycom ,如自己引用组件,可能会出现组件找不到的问题 uni-ui 不支持使用 Vue.use() 的方式安装 在  vue-cli  项目中可以使用  npm  安装  uni-ui  库  注意  cli 项目默认是不编译  node_modules  下的组件的,导致条件编译等功能失效 ,导致组件

    2024年02月19日
    浏览(62)
  • uni-app微信小程序开发自定义select下拉多选内容篇

    欢迎点击领取 -《前端开发面试题进阶秘籍》:前端登顶之巅-最全面的前端知识点梳理总结 技术框架公司的选型:uni-app + uni-ui + vue3 + vite4 + ts 需求分析:微信小程序-uni-ui内容 1、创建一个自定义的下拉,支持多个内容的同时多选 2、定义好出入参数,支持回显内容等 3、绑定

    2024年02月13日
    浏览(47)
  • 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    最近得空学习了下uniapp结合vue3搭建跨端项目。之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发。随着vite.js破局出圈,越来越多的项目偏向于vue3开发,就想着uniapp搭配vite4.x构建项目效果会如何?经过一番尝试果然真香~ uniapp官网提供了  HBuild

    2024年02月09日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包