共享 tsconfig.json 和相对路径

Posted

技术标签:

【中文标题】共享 tsconfig.json 和相对路径【英文标题】:Shared tsconfig.json and relative paths 【发布时间】:2019-02-03 09:44:24 【问题描述】:

我的团队正在维护多个包,我们正在尝试创建一个共享的tsconfig.json,并为所有这些包提供通用配置。它包含我们对编译目标、JSX、输出目录和包含文件的偏好,例如:


  "compilerOptions": 
    "module": "esnext",
    "target": "es5",
    "lib": ["es5", "dom"],
    "jsx": "react",
    "outDir": "build/dist"
  ,
  "include": ["./src/**/*.ts", "./src/**/*.tsx"]

我们将此文件发布为共享的 npm 模块,例如 my-build-config,然后在每个项目中使用 extends


   "extends": "./node_modules/my-build-config/tsconfig.json"

这里的问题是共享配置中的所有路径都是相对于文件位置的。例如。它将尝试包含不是来自当前项目的“.ts”文件,而是包含在my-build-config 中。例如,它寻找的是./node_modules/my-build-config/src/index.ts,而不是./src/index.ts

有没有办法共享文件位置,这样它们就不会在 10 多个包中重复?可能类似于 Jest 对 rootDir 属性所做的事情。

【问题讨论】:

【参考方案1】:

另一种选择是将您的 tsconfig.json 发布为 npm 包。

例如https://github.com/sindresorhus/tsconfig

【讨论】:

这使您回到提问者希望避免的完全相同的问题:如果共享的 tsconfig.json 文件包含相对路径,则这些将相对于 node_modules 位置,而不是项目,即需要解决的问题。这个答案本质上是问题的重新发布,而不是解决方案。【参考方案2】:

如果您知道my-build-config 将始终安装在node_modules/my-build-config 相对于每个没有符号链接的项目,您可以将../../ 添加到每个受影响的路径。

或者,使用其他工具将您的 tsconfig.json 复制到所有项目中,例如 Braid(披露:我是 Braid 贡献者)。

【讨论】:

我试了一下,现在效果很好。谢谢你的想法! 那个相对路径解决方案不好,因为node_modules结构有时不符合预期。

以上是关于共享 tsconfig.json 和相对路径的主要内容,如果未能解决你的问题,请参考以下文章

打字稿无法解析导入中的非相对路径

TypeScript的配置文件 tsconfig.json

compilerOptions.paths 不得设置(不支持别名导入)

相对路径和绝对路径

tsconfig.json 的 baseUrl 不起作用

如何使用 tsconfig.json 中的设置从命令行键入检查单个文件?