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

如何在TypeScript转译时将__dirname替换为固定源目录路径值

解决方案

方案1:使用ts-transformer-dirname(全场景适配)

该方案可在tsc编译阶段自动将所有__dirname替换为对应源文件的固定路径,兼容原生tsc编译、ts-node即时运行、jest + ts-jest转译等所有场景,完全符合需求。
操作步骤:

  • 安装依赖
npm install -D ts-patch ts-transformer-dirname
  • 执行补丁命令,让tsc支持自定义转换器
npx ts-patch install
  • 修改tsconfig.json添加转换器配置
{
  "compilerOptions": {
    // 保留原有配置不变,新增以下plugins字段
    "plugins": [
      {
        "transform": "ts-transformer-dirname",
        "useRelativePath": false,
        "root": "./src"
        // 以上配置下,/src/index.ts中的__dirname会被直接替换为"/src"固定值
      }
    ]
  }
}

配置完成后正常执行tsc编译、ts-node src/index.ts运行、jest测试,__dirname都会返回源文件的固定路径,不受编译输出位置影响。你示例中的代码编译后会直接生成console.log("/src");。

方案2:构建工具场景快速实现

如果你使用Vite、Webpack等构建工具打包代码,可直接使用对应生态插件实现效果:

  • Vite:安装vite-plugin-static-dirname后在vite配置中引入插件即可,编译时自动替换__dirname为源文件固定路径
  • Webpack:编写简易自定义loader,匹配代码中的__dirname关键字,替换为当前处理文件的真实路径即可

方案3:无依赖轻量实现

如果不想引入编译插件,可通过根目录路径锚点的方式实现相同效果:

  • 在项目根目录创建path-anchor.ts,写入固定锚点代码:
// 该文件固定放在项目根目录,不要移动位置
export const PROJECT_ROOT = new URL('.', import.meta.url).pathname.replace(/\/$/, '');
  • 其他源文件需要使用自身源目录路径时,拼接相对于项目根的路径即可,比如/src/index.ts中写:
import { PROJECT_ROOT } from '../path-anchor.ts';
const sourceDir = `${PROJECT_ROOT}/src`;
console.log(sourceDir); // 永远返回项目根下的/src路径,不受运行环境、输出位置影响

该方案无需修改编译流程,缺点是需要手动维护每个文件的相对路径,适合小项目快速使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:57:03