uni-app 设置了skyline模式后 动态绑定的class编译出错
uni-app 设置了skyline模式后 动态绑定的class编译出错
示例代码:
{
"mp-weixin": {
"appid": "wx05d6ba889e3344b6",
"lazyCodeLoading": "requiredComponents",
"rendererOptions": { "skyline": { "defaultContentBox": true } },
"setting": {
"urlCheck": false,
"minified": true
},
"optimization": {
"subPackages": true
},
"usingComponents": true
}
}
<view
class='position-item rounded-[20rpx] flex items-center mb-[24rpx]'
v-for='(item, index) in positionArr'
:key='index'
:class='positionIndex === index ? "position-item-active" : ""'
@click='choosePosition(item, index)'
>
</view>
操作步骤:
设置为skyline之后,动态绑定一个class就可以了。
预期结果:
不应该出现多余符号
实际结果:
出现了多余符号
bug描述:
设置了skyline模式之后,动态绑定的class,在小程序编译出来会携带\符号,导致微信开发者工具报错
| 项目信息 | 详细信息 |
|-------------------|--------------------|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境操作系统 | Mac |
| PC开发环境操作系统版本号 | 16 |
| 第三方开发者工具版本号 | 1.06.2405102 |
| 基础库版本号 | 3.4.3 |
| 项目创建方式 | CLI |
| CLI版本号 | 3.0.0-3090920231225001 |
更多关于uni-app 设置了skyline模式后 动态绑定的class编译出错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
报错跟代码如图

更多关于uni-app 设置了skyline模式后 动态绑定的class编译出错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
感谢反馈,你提到 skyline 编译有问题,我尝试对比一下加之前 加之后的编译产物是否有区别。
我看是否添加 manifest.json 里的 skyline 对编译产物没有影响。编译产物里看起来是一样的。
但是渲染后会丢失 [] ,这个是小程序平台的限制,你可以参考社区的插件进行 postcss 插件进行兼容,比如 https://uni-helper.js.org/vite-plugin-uni-tailwind ,搜索 · characterMap
有没有文档呢,uniapp如何单个页面配置skyline模式呢?
这个情况比较奇怪,单纯开启了全局的skyline模式的时候,不会报错。但是在pages.json某个页面单独配置了"renderer": “skyline”,“componentFramework”: “glass-easel”。则会爆出这种错误,不太清楚是不是因为配置的问题?
回复 三里清风: 我们可能理解的不是一件事情,我以为是渲染后丢失了[] 你看我更新之后的评论
回复 DCloud_UNI_OttoJi: 感谢,我已经清楚原因了。这个问题是因为skyline模式下,不再支持模版中携带转义符号。顺便问一句,uniapp什么时候能支持skyline,手写海报真的烦
回复 三里清风: 好,你可能需要使用插件来绕过编译丢失的问题
在 uni-app 中使用 Skyline 模式时,动态绑定 class 可能会出现编译错误或运行异常。这通常是因为 Skyline 模式对 Vue 的编译和渲染机制进行了优化和调整,导致某些 Vue 的特性在 Skyline 模式下无法正常工作。
可能的原因和解决方案
-
动态
class绑定语法问题
确保你的动态class绑定语法是正确的。例如:<template> <view :class="{'active': isActive, 'error': hasError}"></view> </template> -
Skyline模式下的限制
Skyline模式对Vue的渲染机制进行了优化,可能会限制某些动态绑定的行为。尝试将动态class绑定替换为静态class,或者在Skyline模式下避免使用复杂的动态绑定。 -
检查
uni-app版本
确保你使用的是最新版本的uni-app。某些旧版本可能存在Skyline模式下的兼容性问题,更新到最新版本可能会解决这些问题。 -
使用
style绑定替代class绑定
如果动态class绑定在Skyline模式下出现问题,可以尝试使用style绑定来替代。例如:<template> <view :style="{color: textColor, fontSize: fontSize + 'px'}"></view> </template> -
检查编译器和运行时的配置
确保你的uni-app项目配置中没有错误的编译器或运行时配置。检查manifest.json和pages.json文件,确保Skyline模式的配置正确。 -
调试和日志输出
在出现问题时,可以通过console.log输出相关变量,检查动态class绑定的值是否符合预期。这有助于定位问题的具体原因。
示例代码
以下是一个简单的示例,展示如何在 uni-app 中正确使用动态 class 绑定:
<template>
<view :class="{'active': isActive, 'error': hasError}">Hello World</view>
</template>
<script>
export default {
data() {
return {
isActive: true,
hasError: false
};
}
};
</script>
<style>
.active {
color: green;
}
.error {
color: red;
}
</style>


