谢谢你的快速回复,Alex。让我更详细地解释一下用例。
我们将各种驱动程序作为单独的子项目,并按照需要以其 `:local/root` 坐标包括它们。我们有一个 `:drivers` 别名,其中包括了我们为各种本地开发任务使用的所有驱动程序;我们不将它们作为顶级 `:deps` 包括在内,因为我们用单独的过程构建它们。
有时我们执行 `clj -M:run`(这样就不会将驱动程序子项目包括在类路径中),有时我们执行 `clj -M:drivers:run`(这样就会包括我们的驱动程序子项目)...我们遇到的问题是,无法轻松地准备 `:drivers` 别名添加的子项目,除非手动 `cd` 到每个各自的目录并单独准备它们。
我想到的解决方案是在一个单独的目录中创建一个虚拟的 `deps.edn` 文件,它包含与 `:drivers` 别名相同的 `:local/root` `:extra-deps`,但位于顶级 `:deps` 下。人们可以 `cd` 到这个目录并在那里运行 `clj -X:deps prep`,而不是为每个驱动程序目录单独做这件事。因此,我们的首次设置说明基本上是
```
clj -X:deps prep && cd modules/drivers && clj -X:deps prep
```
在两个不同的文件夹中执行 `clj -X:deps prep` 两次并不是那么糟糕,但只需一次 `clj -X:deps prep :aliases '[:drivers]'`(而不是创建/维护虚拟的 `deps.edn` 文件)会更好。
可以理论上将这些必须进行 AOT(Ahead-of-Time)编译的文件捆绑成单独的工件,但将它们推送到 Clojars、设置一个用作 Maven 存储库的 S3 存储桶,或者类似的东西(并设置 CI 来在更改时自动更新它)并不是我真正想要做的事情,如果没有必要的话。此外,它会使在本地调整这些文件并测试更改变得更加困难。
RE 影响同一台机器上的其他项目
我不太清楚为什么这会有所不同。我的理解是,这最终不会与有人手动将疑虑别名的所有 `:deps`/`:extra-deps` 复制粘贴到项目的顶层 `:deps` 的 `deps.edn` 中并运行 `clj -X:deps prep` 有任何不同。(唯一的不同是我们可能会准备比之前更多的库,但我们准备库的方式并没有不同。)