You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue <script setup>无需导入却无法使用defineProps和defineEmits问题求助

问题原因及解决方案

defineProps、defineEmits 属于 <script setup> 专属的编译器宏,本身不需要手动导入,出现未定义报错分为两种场景,对应解决方案如下:


场景1:仅IDE/ESLint校验报错,项目实际运行正常

这类报错是代码校验工具无法识别编译器宏导致的,解决方法:

  • 升级VSCode的Volar插件到最新正式版,新版默认已支持上述宏的全局识别
  • 若使用ESlint校验,安装 ≥8.0.0版本的eslint-plugin-vue,并修改ESlint配置文件:
// .eslintrc.js 或对应ESlint配置文件
module.exports = {
  extends: [
    'plugin:vue/vue3-recommended'
  ],
  rules: {
    // 开启script setup变量识别规则
    'vue/script-setup-uses-vars': 'error'
  },
  // 直接声明宏为全局只读变量,避免no-undef报错
  globals: {
    defineProps: 'readonly',
    defineEmits: 'readonly',
    defineExpose: 'readonly',
    withDefaults: 'readonly'
  }
}

场景2:项目编译/运行阶段直接抛出未定义错误

这类报错是当前使用的beta版vue-cli存在兼容性问题导致的,解决方法:

  1. 优先升级@vue/cli到5.0及以上正式版,beta测试版存在<script setup>相关的兼容bug,正式版已修复
  2. 若暂时无法升级cli,先删除本地node_modules、package-lock.json或yarn.lock文件,重新安装依赖,保证@vue/compiler-sfc版本和本地vue版本(3.2.19)完全一致
  3. 也可以临时修改vue.config.js配置开启兼容支持:
// vue.config.js
module.exports = {
  chainWebpack: config => {
    config.module
      .rule('vue')
      .use('vue-loader')
      .tap(options => {
        options.experimentalInlineMatchResource = true
        return options
      })
  }
}

内容的提问来源于stack exchange,提问作者Vijay Sasvadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:57:00