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

如何解决TSC编译输出代码中glob模式的路径解析问题

可行解决方案

方案1:动态计算绝对路径+构建时复制静态资源(最推荐,长期可维护)

操作步骤:

  • 安装文件复制工具copyfiles和Node类型声明依赖:
npm install copyfiles @types/node --save-dev
  • 修改package.json的构建脚本,编译完成后自动复制docs目录到输出目录:
{
  "scripts": {
    "build": "tsc && copyfiles -u 1 src/docs/*.yaml dist/",
    "dev": "ts-node --project ./tsconfig.json ./src/index.ts"
  }
}

以上配置默认tsconfig.json中outDir为dist,如果是其他输出目录可自行替换。-u 1参数作用是去掉复制路径的第一层src前缀,保证输出目录下直接生成docs文件夹。

  • 修改index.ts中的加载路径,用__dirname拼接绝对路径:
import path from 'path';

lib.load({ files: [ path.join(__dirname, 'docs', '*.yaml') ] });

优势:

  • 不需要额外判断环境,路径完全和当前文件所在位置绑定,不会出现工作目录变化导致路径失效的问题
  • 项目规模扩大后,新增静态资源只需要调整复制规则即可,统一维护成本低

方案2:环境变量区分运行环境

操作步骤:

  • 安装跨平台环境变量工具cross-env兼容Windows系统:
npm install cross-env --save-dev
  • 启动脚本中注入环境变量,修改package.json:
{
  "scripts": {
    "build": "tsc",
    "dev": "cross-env NODE_ENV=development ts-node --project ./tsconfig.json ./src/index.ts",
    "start": "cross-env NODE_ENV=production node dist/index.js"
  }
}
  • 代码中根据环境变量拼接路径:
const basePath = process.env.NODE_ENV === 'development' ? './src' : '.';
lib.load({ files: [ `${basePath}/docs/*.yaml` ] });

优势:

  • 不需要修改构建逻辑,不需要复制静态资源

注意点:

  • 依赖环境变量正确注入,启动脚本和代码中的环境判断要保持一致
  • 如果运行时工作目录(process.cwd())和项目根目录不一致,会出现路径失效问题

方案3:调整tsconfig配置移除rootDir限制(不推荐,但可用)

如果不想修改现有代码逻辑,可以去掉"rootDir": "./src"配置,将tsconfig的include设置为仅包含src目录即可,编译时会保留src目录结构到输出目录,原./src/docs/*.yaml路径在生产环境也可以直接使用。

劣势:

  • 项目结构分层不清晰,编译输出目录会冗余src层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:03