依赖更新后组件报错,该怎么处理?
我用 Vue 3 写了个简单的用户卡片组件,之前一直好好的。昨天运行 npm update 把依赖全升到最新,结果控制台报错说 defineProps is not defined,完全不知道咋回事。
我查了下 package.json,发现 @vue/compiler-sfc 被自动升级到了 4.x,但项目还是 Vue 3.2 的。是不是版本不兼容?现在不敢随便更新依赖了……
<template>
<div class="user-card">
<h3>{{ name }}</h3>
<p>{{ email }}</p>
</div>
</template>
<script setup>
const props = defineProps({
name: String,
email: String
})
</script>
我的做法是先回退到兼容的版本:
先确认你当前的 Vue 版本:
npm list vue如果是 3.2.x,那就把 @vue/compiler-sfc 锁死在 3.x 版本。在 package.json 里把它的版本改成:
"@vue/compiler-sfc": "^3.2.0"(注意用和你 Vue 主版本一致的 3.x 版本,比如你用 3.2.47 就写 3.2.47 或 ^3.2.47)
然后删掉 node_modules 和 package-lock.json,再重新装:
rm -rf node_modules package-lock.json && npm install这样就能用回原来的 defineProps 行为。别急着全量 update,以后遇到这种编译器相关的包,先看 release note 有没有 breaking change,或者直接用
npm outdated看哪些包真的需要更新,不要一股脑全升。对了,顺带提醒下,Vue 3.4+ 开始就支持
里不用显式 import defineProps 了,但老版本必须靠编译器注入,所以版本对齐特别重要。