TL;DR:所提供的配置文件在profiles.clj中用作dev配置文件的替代品,因为如果在那里使用dev,它将覆盖project.clj中指定的整个dev配置文件。
最常见的用途:provided
是指定在 jar 创建期间应该可用的依赖项,但将由运行时环境提供。但我认为这里被用作防止配置:env
文件中配置的一种方式。 :env
Luminus 会使用:dev
配置文件而不是:provided
在profiles.clj中,如果不是因为他们已经在project.clj的配置文件中的:env
条目中放入了东西,这将被 profile.clj 中的内容覆盖。:dev
请参阅此示例回购。如果您立即运行它,而不进行任何更改(:provided
在profiles.clj中),输出将是:
› lein run
Hello, world
Db config: some:db://localhost
如果您更改:provided
为:dev
在profiles.clj中,则输出更改为:
› lein run
Hello, nil
Db config: some:db://localhost
他们没有被合并,但是:env
in profiles.clj覆盖了:env
in profile.clj
编辑:我刚刚发现,如果在profiles.clj中使用,不仅:env
条目会被覆盖。整个配置文件将被覆盖。这在配置文件文档中进行了解释::dev
:dev
请记住,如果在多个位置指定了具有相同名称的配置文件,则仅选择具有最高“优先级”的配置文件 - 不进行合并。“优先级”是——从最高到最低——profiles.clj、project.clj、用户范围的配置文件,最后是系统范围的配置文件。
因此,:provided
在profiles.clj中使用是围绕leiningen 配置文件的合并策略的一个小技巧。
它至少有一个缺点:如果您需要在project.clj:provided
中定义一个配置文件以指定将在运行时环境中可用的依赖项,它将被配置文件.clj 中定义的配置文件覆盖。