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

本地包导入能否使用包名?解决TS5055文件覆盖错误

问题描述

我正在开发一个包,希望仅当调用本地包的某个特定函数时才构建测试。我通过Babel插件遍历代码,查找特定模块导入来执行相关操作。

当前我使用本地路径导入函数:

import { myFunction } from './';

我希望改用包名导入:

import { myFunction } from 'my-real-package-name';

但本地安装包后,构建时出现TypeScript错误:

error TS5055: Cannot write file '/my-real-package-name/lib/index.d.ts' because it would overwrite input file.

我不想同时检查./和my-real-package-name两种导入路径,只想用包名导入,有没有其他实现方式?

解决方案
  • 配置TypeScript路径映射
    在tsconfig.json里添加paths配置,把包名直接映射到本地源码入口,这样既用包名导入,又不会触发文件覆盖错误:

    {
      "compilerOptions": {
        "baseUrl": ".",
        "paths": {
          "my-real-package-name": ["src/index.ts"],
          "my-real-package-name/*": ["src/*"]
        }
      }
    }
    

    TypeScript会自动把包名导入解析为本地源码路径,完全不需要本地安装自身包。

  • 调整Babel插件逻辑
    因为路径映射已经让包名导入指向本地源码,你的Babel插件遍历代码时,依然能正常识别到对应的模块导入,不需要额外修改插件逻辑。

  • 若必须本地安装自身包,修改输出目录
    如果因为某些原因必须本地安装自己的包,就修改tsconfig.json的outDir,让编译输出到和包本身不同的目录:

    {
      "compilerOptions": {
        "outDir": "./dist"
      }
    }
    

    同时更新包的package.json里的main、types字段,指向新的输出目录(比如dist/index.js、dist/index.d.ts),避免和已安装的包文件冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:30:54