共享 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 和相对路径的主要内容,如果未能解决你的问题,请参考以下文章