2

我的理解是,Bazel 期望项目位于 monorepo 下,顶层有 WORKSPACE 文件,每个项目中都有 BUILD 文件:

Repo
├── ProjectA
│   └── BUILD
├── ProjectB
│   └── BUILD
└── WORKSPACE

但是,通过Bazel NodeJS 规则文档,似乎建议每个项目都应该有它自己的WORKSPACE文件来定义其依赖项。IE ...

Repo
├── ProjectA
│   ├── BUILD
│   └── WORKSPACE
└── ProjectB
    ├── BUILD
    └── WORKSPACE

这看起来类似于一个多存储库,每个项目都将其他项目作为外部依赖项引用,这对我来说似乎没问题,直到我意识到对于外部依赖项,Bazel 需要在每个包的 WORKSPACE 文件中指定所有传递依赖项,这绝对不理想。

将 Bazel 与 NodeJS 项目一起使用的最简单方法是什么,有些项目可能是用其他语言编写的?此外,是否有在多回购设置中使用 Bazel 的示例?

谢谢!

4

2 回答 2

0

我认为这两种可能的选择实际上是

Repo ├── MyProject │ └── BUILD ├── third_party │ └── ProjectB │ └─ BUILD └── WORKSPACE

或者

Repo ├── MyProject │ └── BUILD └── WORKSPACE 在第二种情况下,WORKSPACE 使用https://github.com/bazelbuild/rules_nodejs#using-bazel-managed-dependenciesnpm_install中定义的规则引用 ProjectB

于 2018-09-22T14:42:12.593 回答
0

我仍在尝试自己解决这个问题,但到目前为止我收集到的是WORKSPACE回购的根目录中只有一个文件。您需要有一个package.json文件(可能位于根目录),其中包含整个 repo 中使用的所有依赖项,然后调用npm_installyarn_installWORKSPACE文件中下载它们。

然后你的包BUILD文件可以引用一个依赖项,@npm//some_package如下所示:

filegroup(
  name = 'sources',
  srcs = ['index.js'],
)

npm_package(
  name = 'pkg',
  srcs = [ 'package.json'],
  deps = [
    ':sources'
    '@npm//lodash'
  ],
)

我还没有弄清楚一些不同的依赖边缘情况,所以这可能并不完全正确。祝你好运。

于 2019-09-12T09:59:44.473 回答