Vue TypeScript 使用eval函数的坑

在Vue TypeScript项目中,使用eval函数可能会遇到安全风险和minification问题。文章详细描述了如何在dev环境正常运行,但在打包后由于编译优化导致eval函数失效的问题。解决方案包括将函数封装到对象内,避免编译器优化,以及确保函数内部使用参数,以防止编译器误删。
摘要由CSDN通过智能技术生成

       正常情况下,项目里不会用eval函数,但是万一要调用一个全局的js库,就需要用eval做些骚操作,这个时候编译会提示: is strongly discouraged as it poses security risks and may cause issues with minification.

      警告是可以忽略,刚开始我也没当回事,有风险就有风险,可控,我知道自己写的是啥。但是,今天我改代码的时候出了问题。就是dev时候正常,但是打包以后,不按照预期执行,编译出来的代码就不是我要的逻辑。

问题的关键是:使用eval的函数不能是全局函数(需要包装在一个对象里),然后这个函数内容要简单,不要里面定义各种变量,然后被eval调用,免得被编译时候优化掉

简单的代码实例问题

上一段简单的代码:

<template>
  <div>
    <button @click="btn">测试</button>
  </div>
</template>
<script setup lang="ts">

function myfun(param:number){
    let ret = 0
    eval("ret = param+1")
    return ret;
}
function btn() {
  let ret = myfun(1);
  console.log(ret);
}
</script>

dev运行在浏览器点击

Vue使用 TypeScript 可以使开发更加规范和类型安全。使用 TypeScriptVue 的生命周期函数可以更好地控制组件的生命周期。 在 Vue 中,常用的生命周期函数有 `beforeCreate`、`created`、`beforeMount`、`mounted`、`beforeUpdate`、`updated`、`beforeDestroy` 和 `destroyed`。在 TypeScript 中,可以通过在组件类中定义这些生命周期函数使用它们。 例如,在一个 Vue 组件中,可以这样使用 TypeScript 定义生命周期函数: ```typescript import Vue from 'vue'; export default class MyComponent extends Vue { beforeCreate(): void { console.log('beforeCreate'); } created(): void { console.log('created'); } beforeMount(): void { console.log('beforeMount'); } mounted(): void { console.log('mounted'); } beforeUpdate(): void { console.log('beforeUpdate'); } updated(): void { console.log('updated'); } beforeDestroy(): void { console.log('beforeDestroy'); } destroyed(): void { console.log('destroyed'); } } ``` 在这个例子中,我们通过继承 `Vue` 类来定义组件类,并在类中定义了需要使用的生命周期函数。这样,在组件运行过程中,这些生命周期函数会按照定义的顺序被自动调用,并输出相应的日志信息。 注意,如果使用 TypeScript 定义生命周期函数,需要在函数名后面加上 `(): void`,表示函数不返回任何值。另外,定义生命周期函数时需要遵循 Vue 的生命周期函数的调用顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值