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>环境下,definePropsdefineEmits编译器自动注入的全局宏,直接写,不需要 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 内部直接definePropsdefineProps只能在 vue 单文件顶层使用。

小补充

类似的宏还有:defineOptionsdefineModel,全部都不要 import。

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

相关推荐
whyweplay1 小时前
Elpis:从Json Schema 到 页面
前端·javascript
大牧师1 小时前
Nest.js 微服务入门教程
开发语言·javascript·后端·微服务·node.js·nest.js·nest
做萤石二次开发的哈哈2 小时前
海康班班通交互一体机技能接入实战:ISAPI透传+OTAP双协议封装,Web/App/小程序教学管理应用一站生成
前端·物联网·小程序·交互·萤石开放平台·蓝海aiot一站式工作台·aiot开发
计算机魔术师2 小时前
Anthropic一次性锁死十年算力,5170亿美元买什么
前端
IT_陈寒2 小时前
Redis的订阅丢失消息?你可能忘了这个配置
前端·人工智能·后端
头茬韭菜2 小时前
第 3 篇:「Pydantic 即 Schema」—— 工具生态三层解剖
前端·chrome·ai·openmanus
低代码布道师2 小时前
外包项目管理平台全栈实战课02搭建数据底座:Next.js + PostgreSQL + Prisma 7
开发语言·javascript·postgresql·全栈开发
志尊宝2 小时前
Vue3 零基础每日笔记(004):模板语法初识——插值表达式、v-bind、v-on 一次学会
javascript·vue.js·笔记