1***@qq.com
1***@qq.com
  • 发布:2023-03-14 15:26
  • 更新:2023-03-15 08:55
  • 阅读:268

【报Bug】app 条件编译无效

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows11

手机系统: Android

手机系统版本号: Android 12

手机厂商: 小米

手机机型: 小米10

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: 3.0.0-alpha-3070620230227001

示例代码:
export const presetPointIcons = presetIconName.map((name, idx) => ({  
  name: name,  
  label: presetIconLabel[idx],  
  // #ifdef APP-PLUS  
  src: `static/icons/map-point/${name}.png`  
  // #endif  
  // #ifdef MP-WEIXIN  
  src: `/static/icons/map-point/${name}.png`  
  // #endif  
}))

操作步骤:

将上述代码运行至 android 和 微信开发者工具

预期结果:

app:
const presetPointIcons = presetIconName.map((name, idx) => ({
name,
label: presetIconLabel[idx],
src: static/icons/map-point/${name}.png
}));

weixin:
const presetPointIcons = presetIconName.map((name, idx) => ({
name,
label: presetIconLabel[idx],
src: /static/icons/map-point/${name}.png
}));

实际结果:

小程序正确,app 错误

bug描述:

在 ts 文件中使用了微信小程序和 app 的条件编译,小程序有效 app 却无效。
图 1 为 app 报错,图 2 为小程序正确编译后的代码。

2023-03-14 15:26 负责人:无 分享
已邀请:
DCloud_UNI_WZF

DCloud_UNI_WZF

提供下最简可复现demo

  • 1***@qq.com (作者)

    复现的时候发现该问题仅在 renderjs 环境存在,demo 如下

    2023-03-15 08:56

1***@qq.com

1***@qq.com (作者)

新建 test 页面结构如下:

<template>  
  <view></view>  
</template>  

<script lang="ts">  
import { defineComponent } from 'vue'  

export default defineComponent({})  
</script>  

<script lang="renderjs" module="render" src="./render"></script>

新建 data.ts 内容如下:

export const data = {  
  // #ifdef APP-PLUS  
  message: '我是 app 平台'  
  // #endif  
  // #ifdef MP-WEIXIN  
  message: '我是小程序平台'  
  // #endif  
}

新建 render.ts 内容如下:

import { data } from './data'  

console.log(data.message)
  • DCloud_UNI_WZF

    首先renderjs 仅在 app vue 支持,其次不支持你这种引入方式,测试如下代码正常


    <template>  
    <view>renderjs 条件编译</view>
    </template>

    <script lang="ts">
    import { defineComponent } from 'vue'

    export default defineComponent({})
    </script>

    <script lang="renderjs" module="render">
    export default {
    data() {
    return {
    data: {
    // #ifdef APP-PLUS
    message1: '我是 app 平台',
    // #endif
    // #ifdef MP-WEIXIN
    message2: '我是小程序平台'
    // #endif
    }
    }
    },
    mounted() {
    console.log('message1')
    console.log(this.data.message1)
    console.log('message2')
    console.log(this.data.message2)
    }
    }

    </script>

    2023-03-15 11:32

  • 1***@qq.com (作者)

    回复 DCloud_UNI_WZF: 原来只有写在 vue 文件中的条件编译才有效,引入的文件全都无法被条件编译。很多时候不希望 vue 组件过长,很多功能也被拆成了组合式 api 分散在其他 ts 文件中,这样条件编译不就局限性太大了吗。按照我的理解条件编译应该是所有被打包的文件中写上了指定的条件注释就应该被移除。

    2023-03-15 14:13

要回复问题请先登录注册