Vue3 defineProps` / `defineEmits` 是编译器宏,不需要手动 import 导入

警告解读

复制代码
`defineEmits` is a compiler macro and no longer needs to be imported.
`defineProps` is a compiler macro and no longer needs to be imported.

翻译:defineProps / defineEmits 是编译器宏,不需要手动 import 导入。

哪里会触发警告

在<script setup>里面写了下面这种错误代码:

复制代码
<script setup>
// ❌错误!不要import
import { defineProps, defineEmits } from 'vue'

const props = defineProps({ ... })
const emit = defineEmits(['xxx'])
</script>

Vue3 <script setup>环境下,defineProps、defineEmits是编译器自动注入的全局宏,直接写,不需要 import。

✅正确写法

复制代码
<script setup>
// ✅删掉 import { defineProps, defineEmits } from 'vue'
const props = defineProps({
  imgSrc:{
    type:[String,Object],
    default:''
  }
})
const emit = defineEmits(['update:modelValue'])
</script>

排查步骤

  1. 在项目全局搜索 import { defineProps,找到写了这句的 vue 组件,把这两个从 import 里面删掉。
  2. 重启 pnpm dev,终端黄色警告就消失。

顺带看你的 useErrorView.js

复制代码
import { computed } from 'vue'
import defaultImg from '@/assets/images/error/img_404.png'

export function useErrorView(props) {
  const finalImgSrc = computed(() => {
    return props.imgSrc || defaultImg
  })

  return {
    finalImgSrc
  }
}

调用示例(vue 组件)

复制代码
<script setup>
import { useErrorView } from '@/composables/useErrorView'

const props = defineProps({
  imgSrc: {
    type: [String, Object],
    default: ''
  }
})

const { finalImgSrc } = useErrorView(props)
</script>

注意:必须把组件的props作为参数传给 composable 函数 ,不能在 composable 内部直接defineProps,defineProps只能在 vue 单文件顶层使用。

小补充

类似的宏还有:defineOptions、defineModel,全部都不要 import。

终端那个局域网地址 http://172.26.208.1:3981/ 是 vite 暴露给局域网其他设备访问的地址,属于正常输出。

相关推荐
data analyse 45615 分钟前
报表能自定义的国内统计工具有哪些
前端·数据分析
IT_陈寒33 分钟前
JavaScript闭包的这个坑,我居然今天才爬出来
前端·人工智能·后端
可乐鸡翅yeah_34 分钟前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
葡萄城技术团队39 分钟前
复制走的是数字,留下的是身份:Web 表格里被忽视的数据断层
前端
kyriewen41 分钟前
我实测了前端日期的 5 个坑:差 8 小时只是开始
前端·javascript·程序员
anew___43 分钟前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法
测试运维日常笔记1 小时前
大模型应用专项测试指南:从 Prompt、RAG 到 Agent 的完整链路
前端·prompt
今年下半年1 小时前
【VUE3】移动端:使用腾讯地图显示区域统计与放大显示资产点位
javascript·前端框架·vue·地图
计算机魔术师1 小时前
没有人告诉他们要这么做——AI 智能体自己学会了"组团"越狱
前端