使用 yarn 和 ts 3.0 管理 typescript 项目 monorepo

Posted

技术标签:

【中文标题】使用 yarn 和 ts 3.0 管理 typescript 项目 monorepo【英文标题】:Managing typescript project monorepo with yarn and ts 3.0 【发布时间】:2019-01-16 04:34:56 【问题描述】:

我已经关注 react native monorepo 结构一段时间了

/app
  package.json
/firebase
  /functions
    tsconfig.json
    package.json
/types
  package.json
/ios
/android
tsconfig.json

iosandroid 文件夹是各自的本地代码,所以我们并不真正关心它们,这里仅包含用于不完整的示例。

实际项目有:

app - 应用逻辑

firebase/functions - 后端逻辑

types - 模型和商店的接口

每个都有package.json 文件,其名称属性类似于@MyCompany/app。这是为yarn workspaces 完成的,让我可以轻松地在项目之间导入内容。

到目前为止还不错,现在 typescript 3 出来了,我想看看是否有办法清理它?

目前我有 2 个tsconfig 文件,我相信我可以以某种方式将它们合并为一个?

另外,有没有办法让我定义多个 .d.ts 文件而不是我的 types 文件,并使我的模型和存储接口以某种方式在项目中全局可用?

如果我使用 typescript 3,是否需要保留 yarn 工作区?这些项目没有在任何地方发布,而是部署到不同的目标

【问题讨论】:

【参考方案1】:

目前我有 2 个 tsconfig 文件,我相信我可以以某种方式将它们合并为一个?

我相信您不能从单个 tsconfig 文件中指定单独的编译目标,但如果您想降低文件间的重复次数,您可以在项目的根目录中定义一个包含通用配置的主 tsconfig.json并让您的项目特定tsconfig.jsons extend from the master。

有没有办法让我定义多个 .d.ts 文件而不是我的类型文件,并使我的模型和存储接口以某种方式在项目中全局可用?

是的,您当然可以在任意位置定义任意数量的 .d.ts 文件,并将它们包含在 tsconfig.json 中或使用三斜杠指令临时包含在每个文件中:

如果您想将它们临时包含在每个文件中,您需要使用triple-slash reference directive 并将.d.ts 文件路径作为参数传递。 更简单的方法是通过tsconfig 将它们提供给编译器。如果您使用"files""include" 数组来指定编译器输入,只需将相关的.d.ts 文件添加到列表中。如果您仅使用 "exclude" 数组,请确保不要排除您的 .d.ts 文件。

您可能希望保留 yarn 工作区,因为 TS 3.0 没有可以替代工作区的工具。

希望这会有所帮助。

【讨论】:

以上是关于使用 yarn 和 ts 3.0 管理 typescript 项目 monorepo的主要内容,如果未能解决你的问题,请参考以下文章

ReactCli脚手架使用ts

ReactCli脚手架使用ts

带有 Yarn、TypeScript 和 React Native 的 Lerna:找不到模块“@project/common”或其对应的类型声明。ts(2307)

yarn 全局安装问题

从 npm 迁移到 Yarn 2 PnP:ts-loader 找不到 webpack

yarn VS npm谁更好用?