You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typescript无法解析上级目录shared文件中的yup模块求助

共享目录无法解析项目根目录node_modules的解决办法

目录结构

  • Main/project-root/:包含tsconfig.json、package.json、app.ts等文件,yup等依赖安装在此目录的node_modules中
  • Main/shared/:仅存放shared.ts等TS文件,无package.json及任何配置文件

代码示例

project-root/app.ts

import * as yup from 'yup'
import { whatever } from '@shared/shared.ts'

// 业务逻辑代码

export default myexports;

shared/shared.ts

import * as yup from 'yup'

// 共享逻辑代码

export default mysharedexports;

问题现状

app.ts可正常解析yup模块并运行,但shared.ts无法找到yup模块。已尝试添加"rootDirs": ["./", "../shared"]配置,未解决问题。需求是让shared.ts能访问project-root下所有node_modules依赖。

现有配置

project-root/tsconfig.json

{
  "extends": "@quasar/app-vite/tsconfig-preset",
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@shared/*": ["../shared/*"],
      "@synced-validation/*": ["src/validation/*"],
      "src/*": ["src/*"],
      "app/*": ["*"],
      "components/*": ["src/components/*"],
      "layouts/*": ["src/layouts/*"],
      "pages/*": ["src/pages/*"],
      "assets/*": ["src/assets/*"],
      "boot/*": ["src/boot/*"],
      "stores/*": ["src/stores/*"],
      "validation/*": ["src/validation/*"],
    },
  }
}

@quasar/app-vite/tsconfig-preset 默认配置

{
  "compilerOptions": {
    "allowJs": true,
    // `baseUrl` must be placed on the extending configuration in devland, or paths won't be recognized
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    // Needed to address https://github.com/quasarframework/app-extension-typescript/issues/36
    "noEmit": true,
    "resolveJsonModule": true,
    // Avoid cross-os errors due to inconsistent file casing
    "forceConsistentCasingInFileNames": true,
    "sourceMap": true,
    "strict": true,
    "target": "esnext",
    "isolatedModules": true,
    "useDefineForClassFields": true,
    // Fix Volar issue https://github.com/johnsoncodehk/volar/issues/1153
    "jsx": "preserve",
    "lib": ["esnext", "dom"],
    "paths": {
      "src/*": ["src/*"],
      "app/*": ["*"],
      "components/*": ["src/components/*"],
      "layouts/*": ["src/layouts/*"],
      "pages/*": ["src/pages/*"],
      "assets/*": ["src/assets/*"],
      "boot/*": ["src/boot/*"],
      "stores/*": ["src/stores/*"]
    }
  },
  // Needed to avoid files copied into 'dist' folder (e.g. a `.d.ts` file inside `src-ssr` folder)
  // to be evaluated by TS when their original files has been updated
  "exclude": ["dist", ".quasar", "node_modules"]
}

解决方案

方案1:将shared目录纳入根tsconfig的编译范围

修改project-root/tsconfig.json,添加include字段把shared目录包含进来,让TypeScript将其视为项目的一部分,使用根目录的node_modules解析依赖:

{
  "extends": "@quasar/app-vite/tsconfig-preset",
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@shared/*": ["../shared/*"],
      "@synced-validation/*": ["src/validation/*"],
      "src/*": ["src/*"],
      "app/*": ["*"],
      "components/*": ["src/components/*"],
      "layouts/*": ["src/layouts/*"],
      "pages/*": ["src/pages/*"],
      "assets/*": ["src/assets/*"],
      "boot/*": ["src/boot/*"],
      "stores/*": ["src/stores/*"],
      "validation/*": ["src/validation/*"],
    },
  },
  "include": [
    "src/**/*",
    "../shared/**/*"
  ]
}

方案2:为shared目录添加独立tsconfig并继承根配置

在Main/shared/下创建tsconfig.json,继承根目录的配置并调整baseUrl指向project-root,确保模块解析路径正确:

{
  "extends": "../project-root/tsconfig.json",
  "compilerOptions": {
    "baseUrl": "../project-root/",
    "paths": {
      "@shared/*": ["./*"]
    }
  },
  "include": ["./**/*"]
}

方案3:配置Vite的模块解析规则(适配Quasar环境)

因为项目基于Quasar + Vite,需要确保Vite能正确解析shared目录的依赖。在project-root的quasar.config.js(或vite.config.ts)中添加Vite的resolve配置:

const path = require('path');

module.exports = configure(function (ctx) {
  return {
    // 其他配置...
    vite: {
      resolve: {
        alias: {
          '@shared': path.resolve(__dirname, '../shared'),
        },
        // 指定模块查找目录,优先使用根目录的node_modules
        modules: [path.resolve(__dirname, 'node_modules'), 'node_modules']
      }
    }
  }
})

内容的提问来源于stack exchange,提问作者Slight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:01:01