谢谢你的快速回复,Alex。让我更详细地解释一下这个用例。
我们将各种驱动程序作为独立的子项目发布,根据需要作为 `:local/root` 坐标包含。我们有一个包含我们用于各种本地开发任务的驱动程序的 `:drivers` 别名;我们不将它们作为顶层 `:deps` 包含,因为我们是用单独的过程构建它们的。
有时我们做 `clj -M:run`(这样就不会在我们的类路径上包含驱动程序子项目),有时我们做 `clj -M:drivers:run`(这样就会包括我们的驱动程序子项目)……我们面临的问题是没有简单的方法来准备由 `:drivers` 别名添加的子项目,除非手动逐个进入它们各自的目录并单独准备它们。
我想出的解决办法是在一个单独的目录中创建一个虚置的 `deps.edn` 文件,该文件包含与 `:drivers` 别名相同的 `:local/root` `:extra-deps`,但位于顶级 `:deps` 下。人们可以进入这个目录运行 `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'ed 的文件作为单独的工件,但将它们推送到 Clojars,或设置一个 S3 存储桶作为 Maven 仓库或其他类似的东西(并设置 CI 以在更改时自动更新它)并不是我真正想做的事情,如果可以避免的话。此外,这将使本地调整这些文件和测试更改变得更加困难。
关于影响同一机器上的其他项目
我不太清楚为什么会有所不同。我的理解是,这最终不会与有人手动将问题别名中的所有 `:deps`/`:extra-deps` 从别名复制粘贴到项目 `deps.edn` 的顶层 `:deps` 中然后运行 `clj -X:deps prep` 有任何区别。(唯一的不同是我们可能准备比平时更多的库;但我们是在以不同的方式准备东西。)