Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

前言

在使用 Vue 3 开发项目时,遇到“找不到模块 ‘@/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题,确保你的项目能够正确识别和导入 Vue 组件。

背景

在 Vue 项目中,@ 符号通常用作别名,指向项目的根目录(一般是 src 目录)。这使得模块导入路径更简洁和直观。然而,当使用 TypeScript 时,除了配置 Webpack 或 Vite 以支持别名外,还需要在 TypeScript 配置文件中同步更新别名设置,否则 TypeScript 编译器无法解析这些路径,导致无法找到模块或其相应的类型声明。

问题描述

先上问题截图。
在这里插入图片描述出现这个问题如何解决。这个项目是通过Vite创建的Vue3项目。编辑器使用的是VS Code。

不仅仅代码显示报错,并且编译也报错。

在这里插入图片描述

解决方案

1、安装依赖(主要用于解决 Node.js 环境相关的类型定义问题)

npm i @types/node -D

2、在 vite.config.ts 文件中配置别名:

defineConfig配置项里面增加下面配置:

   resolve:{
    alias:{
      "@":path.resolve(__dirname,'./src')
    }
  }

完整的配置如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve:{
    alias:{
      "@":path.resolve(__dirname,'./src')
    }
  }
})

添加后效果如下:
在这里插入图片描述
3、在 tsconfig.json 文件中配置路径映射:
compilerOptions里面增加以下配置

    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"] 
    }

效果图如下:
在这里插入图片描述

4、重启编辑器VS Code
重启后找不到模块这个问题就解决了。完成以上配置后,你可以使用 @ 别名来导入 Vue 组件,而不会遇到模块解析错误。
在这里插入图片描述

总结

通过正确配置 Webpack/Vite 和 TypeScript,确保 @ 别名在项目中正确解析,你可以避免“找不到模块 ‘@/components/xxx.vue’ 或其相应的类型声明”的错误。以上步骤提供了详细的解决方案,帮助你顺利开发 Vue 3 应用。

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以通过在 `module.exports` 下面添加 `devServer` 和 `proxy` 配置来配置 `devServer` 和 `proxy`,具体如下: ```javascript const { defineConfig } = require("@vue/cli-service"); const path = require("path"); function resolve(dir) { return path.join(__dirname, dir); } module.exports = defineConfig({ transpileDependencies: true, lintOnSave: false, css: { loaderOptions: { less: { additionalData: '@import "@/design/var/index.less";@import "@/components/style/index.less";', }, }, }, chainWebpack: (config) => { config.module.rules.delete("svg"); // 重点:删除默认配置中处理svg config.module .rule("svg-sprite-loader") // rule 匹配规则 .test(/\.svg$/) // 用正则匹配 文件 .include // 包含 .add(resolve("src/icons")) // 处理svg目录 .end() .use("svg-sprite-loader") // 配置loader use() 使用哪个loader .loader("svg-sprite-loader") // 加载loader .options({ // [name] 变量。一般表示匹配到的文件名 xxx.svg // 注意: symbolId 在 <use xlink:href="#dl-icon-svg文件名" /> symbolId: "dl-icon-[name]", // 将所有的.svg 集成到 symbol中,当使用 类名 icon-文件名 }); }, devServer: { host: '0.0.0.0', port: 8080, https: false, open: true, proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, pathRewrite: { '^/api': '' } } } }, proxy: { '/foo': { target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '^/foo': '' } } } }); ``` 上面的代码中,`devServer` 和 `proxy` 都是在 `module.exports` 中添加的配置项,其中: - `devServer` 用于配置本地开发服务器; - `proxy` 用于配置代理请求; 这里的配置和之前的一样,你可以根据自己的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值