解决.nuxt/imports.d.ts中#app/composables/script-stubs导入解析错误
修复"Failed to resolve import '#app/composables/script-stubs'"错误
你的问题根源在于错误地将Nuxt内置的虚拟模块别名指向了类型声明文件。.nuxt/imports.d.ts只是TypeScript的类型定义文件,不是实际的模块代码,Vite自然无法解析这些导入路径。
修复步骤:
移除错误的别名配置
删掉resolve.alias中所有指向.nuxt/imports.d.ts的条目,Nuxt会自动处理#app、#vue-router这类内置虚拟模块的别名,不需要手动指定。修正基础别名(可选)
如果需要保留@和~的别名,确保指向项目根目录的相对路径,避免环境路径问题:alias: { '@': path.resolve(__dirname, './'), '~': path.resolve(__dirname, './'), }不过Nuxt默认已经配置了这些别名,你甚至可以完全移除这个
alias对象,让Nuxt自动管理。调整AutoImport/Components插件(避免冲突)
Nuxt本身自带自动导入功能,如果你同时使用了unplugin-auto-import和unplugin-vue-components,可能会和Nuxt的内置功能冲突。建议:- 要么在
nuxt.config.ts中设置autoImports: false,禁用Nuxt的内置自动导入 - 要么移除Vite配置中的这两个插件,改用Nuxt的内置自动导入能力
- 要么在
清理并重建Nuxt缓存
删除.nuxt文件夹,然后运行:npx nuxt prepare # 或者直接启动开发服务器 npx nuxt dev这会重新生成正确的类型文件和模块映射。
修改后的Vite配置示例:
import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import Components from 'unplugin-vue-components/vite'; import AutoImport from 'unplugin-auto-import/vite'; import path from 'path'; export default defineConfig({ plugins: [ vue(), Components({ dts: true, types: [{ from: 'vue-router', names: ['RouterLink', 'RouterView'], }], dirs: ['./components'], }), AutoImport({ imports: [ 'vue', 'vitest', 'pinia', "vue-router-composables", "vitepress" ], dirs: ['./composables', './stores', './utils'], dts: true, }), ], test: { globals: true, environment: 'happy-dom', include: ['__tests__/**/*.spec.ts'], coverage: { all: true, }, }, resolve: { alias: { '@': path.resolve(__dirname, './'), '~': path.resolve(__dirname, './'), }, }, publicDir: 'public', });
额外注意事项:
- 确保你的Nuxt版本和Vite版本兼容,建议使用最新稳定版。
- 如果是VitePress项目,注意VitePress本身也有自己的别名管理逻辑,避免和手动配置冲突。
内容的提问来源于stack exchange,提问作者Julio S
相关产品推荐
相关产品推荐

