vite vue 使用()=>import()动态导入vue组件,怎么使用'@'符号导入?

在vite下,要动态导入vue组件,想通过项目内的绝对路径的形式,也就是使用@符号,而不是使用相对路径

以下测试和测试结果描述
vue事件代码内执行动态导入:() => import("../test/test1.vue");不报错,导入成功。

静态导入:import xx from "@/test/test1.vue",也不会报错,可以使用

vue事件代码内执行动态导入:() => import("@/test/test1.vue");报错,内容如下

[Vue warn]: Failed to resolve async component: () =>  import(__vite__injectQuery(this.pagePathBase+item.view_path, 'import'))
Reason: TypeError: Failed to resolve module specifier '@/test/test1.vue'

这个问题怎么解决,需要在vite.config.js文件里添加什么配置吗

这是vite.config.js文件的内容:


import { createVuePlugin } from 'vite-plugin-vue2'

import { join } from "path";
import { defineConfig } from 'vite'


export default {
  plugins: [
    createVuePlugin(/* options */)
  ],
  resolve: {
    alias: {
      '@': join(__dirname, "src"),
    }
  }
}

阅读 6.3k
6 个回答

改成这个试试

 resolve: {
      alias: [
        // /@/xxxx => src/xxxx
        {
          find: /@\//,
          replacement:  resolve(__dirname, "src") + '/',
        },
      ],
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    },

将@改成其他符号 比如~

join(__dirname, "src")换成resolve(__dirname, "src")

这个问题曾经遇到过, 当时也没解决, 查了资料说vite不能设置@

import { resolve } from 'path'

resolve: {
    alias: {
      '@': resolve(__dirname, 'src')
    }
  },

如果用TS,在tsconfig.json 里也加上

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

我猜测问题是在async component上而非是alias的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏