感谢你的快速回复,Alex。让我更详细地解释一下用例
我们已经将各种驱动程序作为独立的子项目发布,按需以`:local/root`坐标包含它们。我们有一个`:drivers`别名,其中包含我们用于各种本地开发任务的全部驱动程序;我们不将它们作为顶级`:deps`包含,因为我们用独立的过程构建它们。
有时我们执行`clj -M:run`(以便不在类路径上包含我们的驱动子项目),有时我们执行`clj -M:drivers:run`(以便包含我们的驱动子项目)...我们遇到的问题是,在不需要手动`cd`到每个相应的目录并分别准备它们的情况下,没有简单的方法来准备由`: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`并没有那么糟糕,但只执行一次`clj -X:deps prep :aliases '[:drivers]'`(且不创建/维护示例`deps.edn`文件)会更为优雅。
可以说,我们可以将需要AOT化的文件捆绑为单独的构件,但是将这些推送到Clojars,或者设置一个S3存储桶作为Maven仓库等(并设置CI在更改时自动更新),如果不是必须的,我真的不想这么做。此外,它会使在本地调整这些文件和测试更改变得更加困难。
关于影响同一台机器上的其他项目
我不太确定我理解了为什么这会有所不同。我的理解是,这最终不会与有人手动将相关别名中的所有`:deps`/`:extra-deps`复制粘贴到项目顶层`deps.edn`中的`:deps`,然后运行`clj -X:deps prep`有任何区别。(唯一的区别是我们可能预置的库比以前多;但我们预置的东西并没有什么不同。)