VScode无法在MacOS中使用命令+单击跳转到Vue3的自定义组件

zte4gxcn  于 2023-11-21  发布在  Vue.js
关注(0)|答案(3)|浏览(375)

对于同一个项目,我可以在Windows 10中通过自定义组件名使用命令+单击跳转到对应的.vue文件,但在MacOS中无法使用命令+单击跳转,我尝试过重新安装VScode和打开其他项目,问题仍然存在,我使用unplugin-vue-components自动导入组件,生成components.d.ts,项目可以正常运行。
在windows版本下运行时会显示显示类型,但mac中自定义组件的类型显示任何.ts.js函数方法和原生标签,如div可以跳转,但自定义组件不能跳转,比如el-button。我也在github https://github.com/unplugin/unplugin-vue-components/issues/710上提出了同样的问题,因为我没有足够的信誉来上传图片。

  • VScode版本:1.84.0(手臂)
  • 系统版本:MacOS Ventura 13.6
  • unplugin-vue-components:0.25.1
  • TypeScript Vue Plugin(Volar)1.8.22
  • Vue语言功能(Volar)1.8.22
  • PNPM 8.10.2
  • Nodejs 20.9.0

在MacOS上使用命令并单击以跳转到相应自定义组件的.vue文件。

  • tsconfig.app.json
{
  "extends": "@vue/tsconfig/tsconfig.dom.json",
  "include": ["src/types/*.d.ts", "src/**/*.ts", "src/**/*.vue"],
  "exclude": ["src/**/__tests__/*"],
  "compilerOptions": {
    "composite": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

字符串

  • vite.config.ts
import { fileURLToPath, URL } from 'node:url';
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import IconsResolver from 'unplugin-icons/resolver';
import Components from 'unplugin-vue-components/vite';
import Icons from 'unplugin-icons/vite';
import {
  ElementPlusResolver,
  VueUseComponentsResolver
} from 'unplugin-vue-components/resolvers';

export default defineConfig(({ command, mode }) => {
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  const isBuild = command === 'build';

  // 读取env配置文件
  const env = loadEnv(mode, process.cwd());

  return {
    plugins: [
      vue(),
      // api按需导入
      AutoImport({
        // 定义element-plus api按需加载
        resolvers: [ElementPlusResolver()],
        // 导入vue以及其他 api按需加载
        imports: ['vue', 'vue-router', 'pinia'],
        // 目录文件按需加载
        dirs: ['src/enums/**/*', 'src/stores/**/*'],
        vueTemplate: true,
        // 类型文件输出目录
        dts: 'src/types/auto-imports.d.ts'
      }),
      // 自动导入组件
      Components({
        resolvers: [
          // Element plus组件自动导入
          ElementPlusResolver(),
          // Vue组件自动导入
          VueUseComponentsResolver(),
          // 图标自动导入
          IconsResolver({
            prefix: false,
            enabledCollections: ['icon-park-outline'],
            alias: {
              park: 'icon-park-outline'
            }
          })
        ],
        extensions: ['vue', 'ts'],
        dirs: ['src/components', 'src/layouts'],
        // 类型文件输出目录
        dts: 'src/types/components.d.ts'
      }),
      Icons({
        autoInstall: true,
        compiler: 'vue3'
      })
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: '@import "./src/assets/styles/var.scss";'
        }
      }
    },
    server: {
      proxy: {
        '/api': {
          target: env.VITE_API_URL,
          changeOrigin: true
        },
        '/public': {
          target: env.VITE_API_URL,
          changeOrigin: true
        }
      }
    }
  };
});

  • tsconfig.json
{
  "files": [],
  "references": [
    {
      "path": "./tsconfig.node.json"
    },
    {
      "path": "./tsconfig.app.json"
    }
  ],
  "compilerOptions": {
    // 指定全局组件类型
    "types": ["element-plus/global"]
  }
}

kgsdhlau

kgsdhlau1#

几天前我遇到了同样的问题。
我的问题是“components.d.ts”和“auto-imports.d.ds”不在tslog.json的“include”字段中。

rm5edbpk

rm5edbpk2#

参见Element Plus文档
如果使用volar,请将全局组件类型定义添加到tsconfig.json中的compilerOptions.types。

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "types": ["element-plus/global"]
  }
}

字符串

hjzp0vay

hjzp0vay3#

问题解决了,是Vue Language Features (Volar)插件版本的问题,1.8.22版本有BUG,无法显示自定义组件的类型,只需将版本降低到1.8.11即可。

相关问题