uni-app各环节版本兼容性说明
uni-app各环节版本兼容性说明
此文档停止维护,最新的文档见:uni版本说明
uni-app是一个跨度很大的产品,支持多种开发ide、HBuilderX有正式版和alpha版、支持cli和普通项目、支持很多端、有云打包app和本地打包app、编译器模式支持老的模板模式和新的自定义组件模式。
它们都会升级,如果出现一个升级、另一个未升级的情况,可能会运行异常。
正常情况,HBuilderX升级后,其自带的app运行基座、uni-app编译器、云打包配套引擎会同步升级。但在开发者使用cli创建项目、使用自定义基座、使用5+sdk离线打包时,就需要手动维护版本更新。
我们经常遇到的误报问题是:“我的HBuilderX已经是最新版了,升级日志里提到的已解决问题,为什么没有仍然存在?”,其实有的是因为cli项目下编译器是旧的、有的是因为本地打包的sdk是旧的,有的是因为自定义基座的版本是旧的。
-
如果你使用cli创建项目(即项目根目录是package.json),不管用什么ide,即便是用HBuilderX,切记cli项目的编译器是在项目下的,HBuilderX不管怎么升级都不会影响编译器版本。你需要手动npm update来升级编译器。以及如果你想要安装less、scss等预编译器,也需要自己npm安装在项目下,而不是在HBuilderX的插件管理里安装。
-
如果你使用离线打包,请注意HBuilderX升级后,真机运行基座和云打包对应引擎跟随HBuilderX升级,而你的sdk需要手动升级。sdk的版本升级一般滞后HBuilderX正式版升级一两天。在这里下载最新版
-
如果你使用自定义基座,之前制作的自定义基座是不会跟随HBuilderX升级的,升级HBuilderX后你应该重新制作新版自定义基座。
-
如果你使用wgt升级,新版HBuilderX编译的wgt,运行到之前的runtime上,一定要先测试好,看有没有兼容性问题。如果有问题,就不要wgt升级,整包升级。
-
考虑到向下兼容,uni-app编译器在升级为新的自定义组件模式后,同时保留了对老编译模式的向下兼容。 在HBuilderX alpha版中,App端一定会使用新编译器,不理会manifest配置。 在HBuilderX 正式版中,新创建的项目会使用新编译器,老项目不会强制使用,而是开发者自己在manifest里配置开启。
-
如果你使用其他ide开发uni-app,会经常因为拼错单词而运行失败,因为经过webpack编译一道,很多错误反应的不够直观,排错时间很长,不如从开始就依赖有良好提示的HBuilderX,避免敲错单词。
-
云打包的引擎版本说明 自HBuilderX 3.9起,云打包机版本保留了多个可用的版本,具体可用的云端打包版本参考下方的版本对应表。 打包时,服务端会根据用户使用的HBuilderX或cli版本去匹配最合适的打包机,规则如下(匹配优先级从高到低):
- HBuilderX或cli版本与云端版本完全一致;
- HBuilderX或cli版本的大版本号与云端一致时,使用该大版本的最新版本;如打包机上有[3.92, 3.93, 3.99, 4.01, 4.10],则3.91使用3.99打包机。
- 当以上规则无法匹配时,使用云端最新版本。
举个例子:
当云打包机有以下版本[3.7.11,3.8.12,3.92, 3.93, 3.99, 4.01, 4.15]可用时:
- 如果HBuilderX使用3.7.11,3.8.12,3.92, 3.93, 3.99, 4.08, 4.15这些版本时,版本号完全匹配,直接使用同版本号打包机;
- 如果HBuilderX使用3.7.3,则云端打包机使用3.7.11版本;HBuilderX使用3.91,则云端打包机使用3.99版本;HBuilderX使用4.01版本,则云端打包机使用4.08版本;
- 如果HBuilderX使用3.7以下的版本,则云端打包机使用最新版本4.15。
很多人在报问题时不说清自己的情况,导致别人给出错误的回答。 很多人在搜问题时没注意看条件,导致使用了并不适用于自己的错误方案。
要想问题少,推荐使用HBuilderX完成一切工作,包括创建项目、运行编译、云打包app。 因为在这套体系里,官方会对很多常见的问题做出提醒和引导,减少问题的概率。随着HBuilderX的升级,uni-app编译器、真机运行基座、云打包引擎都会升级。
版本列表
产品 | 版本 |
---|---|
uni-app编译器 | 版本列表 |
真机运行基座 | 版本列表 |
云打包引擎 | 版本列表 |
在开发uni-app应用时,确保各环节版本兼容性至关重要。以下是一个简要的代码案例和说明,旨在帮助开发者理解和处理uni-app在不同环节(如开发环境、编译环境、运行时环境等)的版本兼容性。
1. 开发环境版本兼容性
确保你的开发环境(如HBuilderX、Node.js等)与uni-app支持的版本相匹配。
示例:检查HBuilderX版本
// 示例代码:在命令行中检查HBuilderX版本(假设已安装并配置环境变量)
const { exec } = require('child_process');
exec('hbuilderx --version', (error, stdout, stderr) => {
if (error) {
console.error(`执行出错: ${error}`);
return;
}
console.log(`HBuilderX 版本: ${stdout.trim()}`);
// 可以在此处添加版本兼容性判断逻辑
});
2. 编译环境版本兼容性
uni-app支持多种编译目标(如小程序、H5、App等),确保你的编译配置与目标平台的版本要求相匹配。
示例:配置编译目标
// pages.json 中的编译配置示例
{
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#000000",
"backgroundColor": "#ffffff"
},
"condition": { // 模式配置,仅开发时生效
"current": 0, // 当前激活的模式(list 的索引项)
"list": [
{
"name": "test", // 模式名称
"path": "pages/index/index", // 启动页面,必需
"query": "interval=4000&autoplay=false" // 启动参数,可选
}
]
},
"mp-weixin": { // 微信小程序特有配置
"appid": "xxxxxxxxx", // 必填,小程序的appid
"setting": {
"urlCheck": false
}
}
}
3. 运行时环境版本兼容性
确保你的应用在不同平台(如iOS、Android、微信小程序等)的运行时环境中能够正确运行。
示例:条件编译处理不同平台
// 在JavaScript中根据平台做条件编译
if (process.env.PLATFORM === 'h5') {
// H5平台特有代码
console.log('运行在H5平台');
} else if (process.env.PLATFORM === 'mp-weixin') {
// 微信小程序特有代码
console.log('运行在微信小程序平台');
}
// 在Vue组件中使用平台特有样式或功能
<template>
<view>
<text v-if="$mp.system.platform === 'ios'">iOS平台特有内容</text>
<text v-else>其他平台内容</text>
</view>
</template>
通过上述代码示例,开发者可以更好地理解和处理uni-app在不同环节中的版本兼容性。确保开发、编译和运行时环境的版本匹配,是构建稳定、可靠应用的关键。