8***@qq.com
8***@qq.com
  • 发布:2023-05-09 09:44
  • 更新:2023-05-09 14:57
  • 阅读:277

【报Bug】编译器vite vue 语法校验有问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 3.7.11

手机系统: Android

手机系统版本号: Android 12

手机厂商: 华为

手机机型: 小米11 Ultra

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

const data = $ref(false)  

data = true  

//以上代码在编译时就会报错 [plugin:vite:vue] Assignment to constant variable  

操作步骤:

const data = $ref(false);
data = true

预期结果:

编译通过

实际结果:

编译无法通过。[plugin:vite:vue] Assignment to constant variable

bug描述:

vite对vue 编译时的语法错误校验, 响应式语法糖 const data= $ref(0) 像这样的代理数据 做出修改 data= 1 ,编译时也会无法通过,提示 [plugin:vite:vue] Assignment to constant variable ,这是什么大便识别啊。 项目所有const 都得改let !! 无语了。 3.6.18之后的版本全部会这样,实在受不了 就来提个bug.. 希望官方看到了 能在下个版本修复。(官方给出的响应式语法糖声明确实都是let,我不明白是故意为之,还是都是巧合。提个帖子,看看哪位大佬能解答我的疑惑。v3响应式数据 操作的都是代理对象,不会影响声明数据本身,也就是无所谓const 或者let 这是我的理解)

2023-05-09 09:44 负责人:无 分享
已邀请:
DCloud_UNI_WZF

DCloud_UNI_WZF

3.7.13 测试正常,检查下代码编写,如确认框架问题,提供下测试工程

<script setup>  
    import {ref} from 'vue'  
    const title = ref('test title')  
    title.value = 'new title'  
    const test = ref('test')  
    test.value = 'new test'  
</script>
  • 8***@qq.com (作者)

    你好 我这里用了setup语法糖,vite.config.js 配置了 uni({

    vueOptions: {

    reactivityTransform: true // 开启响应式语法糖

    }

    })

    在 const title = $ref();

    title = '早上好';

    在编译阶段就会报错 [plugin:vite:vue] Assignment to constant variable.

    这样就不行

    2023-05-09 11:15

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

    我上传了一个新建项目的 代码 你可以试试,真跑不动。 改成let 就可以 真的很无语。

    2023-05-09 11:17

  • DCloud_UNI_WZF

    回复 8***@qq.com: 用 title.value 修改,基本常识

    2023-05-09 11:39

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

    回复 DCloud_UNI_WZF: 这就是dcloud前端的风采吗?你都不知道我在说什么是吗? 看文档https://cn.vuejs.org/guide/extras/reactivity-transform.html#refs-vs-reactive-variables

    2023-05-10 15:01

  • DCloud_UNI_WZF

    回复 8***@qq.com: 这本身就是一个实验性的特性,并且已经废弃,uniapp 基于 vue, vue 已不支持,uniapp 编译如何支持?

    2023-05-10 17:17

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

    回复 DCloud_UNI_WZF: 那么为何uniapp 在 vite-plugin-uni插件中 提供vueOption:{reactivityTransform: true // 开启响应式语法糖},官方将响应式语法糖从vue主包中剔除并声明如果需要使用可通过插件的方式引用,uniapp也提供了以上插件给出了支持。我的问题是在宏编译过程中,强制校验 被const 或let声明的代理数据是否合理,如果这个行为和uniapp 无关,你大可以说是vue的问题。你这给我个.value的回答我是没想到的。

    2023-05-11 10:59

8***@qq.com

8***@qq.com (作者) - helloworld

新建的测试项目,测试该问题。 大家可以试试!

3***@qq.com

3***@qq.com

const title = $ref(); const 改成 let 就行了,vue文档里这个特性也用的是let声明,另外reactivityTransform这个特性已经被取消了,至于为什么被取消你现在有没有感受到一丁点?你这还没开始呢就已经出现问题了

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

    reactivityTransform 在vue主包中被取消,但是可以同引入插件的方式使用,这个宏编译不要太好用,我的项目已经使用1年了,只是Hbuilder 更新后 出现了如上的问题,被删除的原因官方github 上有,无法更好兼容TS 同时组合式API 的部分功能与宏编译产生的功能问题与性能问题 无法得到解决 如provide inject. 文档上都有可以去看看,不用故弄玄虚。并不是还没开始就出问题,对于小型项目 语法糖轻量化优势明显。let 与const 的问题确实官方的例子给出的都是let ,我提出疑问的时候想当然了,觉得既然v3 操作的是代理数据,就不应该对我cosnt 或let 类型进行强制性校验。

    2023-05-10 15:11

要回复问题请先登录注册