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 暴露给局域网其他设备访问的地址,属于正常输出。

相关推荐
IT_陈寒10 分钟前
Redis连接池泄漏那次,我差点把生产环境搞崩了
前端·人工智能·后端
强尼银手16 分钟前
我花一天做了个格斗游戏原型,判定全对,然后被「美术」劝退了
前端·javascript
石小石Orz26 分钟前
AI 正在蚕食我们的编码能力
前端·后端·算法
陈随易1 小时前
专注飞机 FocusFlight,两个人把番茄钟做成了一趟航班
前端·后端·程序员
总要学点什么2 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
10share2 小时前
基于大模型的 i18n 方案:把中文原文当 Key,轻松搞定多语言维护
前端·vue.js
OpsEye2 小时前
混合云 AI 架构,如何统一做敏感内容拦截?
javascript·ai编程
Funlang4 小时前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
古茗前端团队4 小时前
由 key 引发的思考
前端·javascript·react.js
kyriewen5 小时前
我扫了 422 个仓库,近一半 CI 在裸装依赖
前端·javascript·程序员