Vue3里的main.js报错

最近在学Vue3,用vite脚手架创建了项目,发现main.js里面导入App模块竟然报错了

如图:

问题:

未定义 .vue文件类型导致ts无法解析类型,

方案一:

在env.d.ts文件声明就行了

declare module '*.vue' {

  import type { DefineComponent } from 'vue';

  const vueComponent: DefineComponent<{}, {}, any>;

  export default vueComponent;

}

 方案二:

在tsconfig.json中加入:

"compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "strict": false,
    "jsx": "preserve",
    "moduleResolution": "Node"
  }

如果还是报错:那就得从扩展插件下手了

需要去VSCode扩展插件禁用Vetur插件,开启Volar插件然后点击重新加载或退出VSCode重新进去就不报错了

### 解决Vue3中Prototype相关报错的方法 在Vue2向Vue3迁移过程中,由于API的变化以及内部实现机制的不同,可能会遇到一些原本基于`Vue.prototype`扩展的功能无法正常工作的情况。在Vue2中,开发者可以通过修改`Vue.prototype`来全局注册方法或属性,在任何组件实例中都可以访问这些定义的内容[^1]。 然而,在Vue3,这种做法不再适用,因为Vue3移除了对`Vue.prototype`的支持。为了实现在所有组件间共享逻辑或者功能的目的,推荐采用组合式API(composition API)中的提供/注入(provide/inject)[^2] 或者使用插件的方式引入公共工具函数和服务: #### 使用Provide/Inject模式 这是一种父子组件之间传递数据的有效方式。父组件可以作为提供方,子组件则是接收方。这种方式不仅限于基本类型的传递,还可以用来分发整个模块、服务类等复杂结构的对象给后代组件们使用。 ```javascript // 父组件 ParentComponent.vue export default { setup() { const sharedMethod = () => console.log(&#39;Shared Method Called&#39;); provide(&#39;sharedMethod&#39;, sharedMethod); return {}; } } ``` 对于需要使用的子组件来说,则只需要简单声明即可获取到这个被提供的资源: ```javascript // 子组件 ChildComponent.vue import { inject } from &#39;vue&#39;; export default { setup() { const sharedMethod = inject(&#39;sharedMethod&#39;); // Now you can use `sharedMethod()` here. return { sharedMethod }; } } ``` #### 创建并安装Plugin 如果希望更广泛地应用某些特性而不局限于特定层次关系内的组件交流的话,那么构建一个自定义插件可能是更好的选择。这允许在整个应用程序范围内轻松集成第三方库或者其他通用业务逻辑。 创建一个新的文件比如叫my-plugin.js, 并按照如下形式编写代码: ```javascript const MyPlugin = { install(app){ app.config.globalProperties.$customFunction = function(){ alert("This is a custom global method."); }; // Optionally add to properties that will be available on every component instance&#39;s context object ($attrs, $listeners etc.) app.provide(&#39;$customService&#39;, someCustomServiceInstance); } }; ``` 接着在main.js(main.ts) 中导入此插件并调用app.use(MyPlugin),这样就能让所有的单文件组件都能方便快捷地获得新添加的能力了。 通过上述两种途径之一,可以在不依赖已废弃特性的前提下完成相同的需求满足,并且更加符合现代前端开发的最佳实践标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值