如何使用可单独部署的包制作 Bazel TypeScript monorepo

Vit*_* EL 5 bazel bazel-rules-nodejs

我一直在尝试让 bazel monorepo 与打字稿一起工作。我有几个要求。

  1. 我应该能够使用 @myworkspace/ 而不是 ../../../ 等导入本地包,而不需要 Bazel。这主要是为了让我在写作时能够自动完成。
  2. @myworkspace/ 包在开发和构建期间应该是相同的,但在运行沙箱时,只有 Bazel 管理的依赖项应该在导入时得到解析。只是为了让我知道我是否弄乱了 js_library 规则中的包名称。
  3. 整个项目应该只有一个锁定文件。所有依赖项应位于 root/node_modules 中。
  4. 应该可以单独部署节点包,即@myworkspace/myCloudFunction。
  5. 应该可以在将部署的包中包含本地依赖项。

我是 Bazel 的新手,来自 NPM 生态系统的我似乎需要一些心态上的改变。经过谷歌搜索后,我设法找到了适用于第 1 点和第 2 点的东西(但我可能是错的)。我已经在https://github.com/vitorelourenco/bazelmono-ts上发布了游乐场存储库(几乎是来自https://github.com/lokshunhung/bazel-ts-monorepo 的副本,其中包含我从 https://github.com/lokshunhung/bazel-ts-monorepo 获取的一些想法: //github.com/Angular/Angular

我关于第 3 点和第 4 点的问题:假设我希望在包 @myworkspace/cloudFunction 上提供 lib Lodash,并将其部署到 Google Cloud Functions。如果我在 @myworkspace/cloudFunction 文件夹中安装 Lodash,那么 Lodash 将被添加到 package.json 中,但我将拥有第二个 node_modules 文件夹和第二个 yarn.lock 文件,我不希望这样。但如果我将其安装在 root/ 中,那么 Lodash 将不会添加到位于 @myworkspace/cloudFunction 的 package.json 上列出的依赖项中,并且当我部署它时,它也不会安装。有聪明的方法来处理这个问题吗?

第5点非常相似。理想情况下,最终的 Bazel 输出将捆绑本地依赖项并准备使用,但我似乎还无法找到一种方法来做到这一点。我尝试将 pkg_npm 规则添加到 playgroup 存储库中的 //packages/app 中,但无法使其包含 //packages/common 。