感谢你快速的回复,Alex。让我详细解释一下这个用例。
我们将各种驱动程序作为单独的子项目,并按需作为 `:local/root` 坐标包含它们。我们有一个 `:drivers` 别名,它包含我们用于各种本地开发任务的所有驱动程序;我们不将它们作为顶级 `:deps` 包含,因为我们用单独的过程来构建它们。
有时我们进行 `clj -M:run`(这样就不将我们的驱动程序子项目包含在类路径中),有时我们进行 `clj -M:drivers:run`(这样就将我们的驱动程序子项目包含在类路径中)... 我们遇到的问题是,在没有手动进入每个各自的目录并单独准备它们的情况下,没有简单的方法来准备由 `:drivers` 别名添加的子项目。
我提出的解决方案是,在一个单独的目录中创建一个虚构的 `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编译的文件打包成单独的工件,但如果不必这样做,我并不想推送到Clojars或者设置一个S3存储桶作为Maven仓库或者类似的东西(并设置CI自动化更新),这不是我真正想做的事情。另外,这将使得在本地调整这些文件和测试更改更加困难。
影响同一台机器上的其他项目
我不确定我是否理解了为什么这会有差别。我的理解是,这最终不会与手动将相关的`:deps`/`:extra-deps`别名全部复制粘贴到项目的顶层`deps.edn`文件的`:deps`部分,然后执行`clj -X:deps prep`有所不同。(唯一的不同可能是我们可能准备比正常更多的库;但我们并不是用不同的方式来准备这些库。)