Nuxt3开发模式使用rxjs报错:无法找到'./internal/Observable'模块
问题现象
Nuxt3应用依赖rxjs时,开发模式下rxjs被识别为CommonJS模块,抛出以下错误:
Cannot find module './internal/Observable'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Module.require (node:internal/modules/cjs/loader:1141:19)
at require (node:internal/modules/cjs/helpers:110:18)
at ./rxjs:17:20
at ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:331:11)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:171:14)
at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:220:14)
at async ./app.vue:2:31
生产模式下Rollup打包正常,Vue3+Vite+rxjs组合也可正常运行,问题仅存在于Nuxt开发模式中。
解决方法
配置Nuxt的Vite选项强制转译rxjs
在nuxt.config.ts中添加以下配置,让Vite在开发模式下将rxjs作为ES模块处理:export default defineNuxtConfig({ vite: { optimizeDeps: { include: ['rxjs'], esbuildOptions: { target: 'esnext' } }, ssr: { noExternal: ['rxjs'] } } })直接导入rxjs的ES模块入口
修改代码中的导入路径,指定使用rxjs的ES模块版本:// 替换原导入语句 import { Observable } from 'rxjs/dist/esm/index.js'此方法需修改代码导入路径,优先级低于配置方案。
升级依赖版本
确保Nuxt3和rxjs为最新稳定版,部分旧版本兼容性问题已在新版本中修复,执行命令更新:npm update nuxt rxjs
内容的提问来源于stack exchange,提问作者suelje

