gpt4 book ai didi

clojure - :provided mean in profiles. clj 是什么意思?

转载 作者:行者123 更新时间:2023-12-02 02:48:44 29 4
gpt4 key购买 nike

Luminus 现在正在创建一个包含以下内容的 profile.clj:

{:provided {:env {;;when set the application start the nREPL server on load
:nrepl-port "7001"
:database-url "jdbc:mysql://localhost:3306/mysqlkorma_dev?user=db_user_name_here&password=db_user_password_here"}}}

:provided 在这里做什么?在环境的文档中,它似乎指出有两个条目,一个用于开发,一个用于测试 https://github.com/weavejester/environ .

最佳答案

TL;DR:提供的配置文件在profiles.clj中用作dev的替代品配置文件,因为如果在那里使用dev,它将覆盖project.clj中指定的整个dev配置文件

<小时/>

:provided 最常见的用途是指定在 jar 创建期间应该可用的依赖项,但将由运行时环境提供。但我认为这里用作防止 profiles.clj 中配置的 :env (旨在不提交到源代码存储库中)覆盖:envproject.clj 中配置。

Luminus 会在 profiles.clj 中使用 :dev 配置文件而不是 :provided,如果事实不是这样的话他们已经将内容放入 project.clj:dev 配置文件的 :env 条目中,该条目将被 配置文件中的内容覆盖.clj.

参见this example repo 。如果您立即运行它,不进行任何更改(在 profiles.clj 中使用 :provided),输出将是:

› lein run
Hello, world
Db config: some:db://localhost

如果您在 profiles.clj 中将 :provided 更改为 :dev,输出将更改为:

› lein run
Hello, nil
Db config: some:db://localhost

它们没有合并,但是 profiles.clj 中的 :env 覆盖了 profile.clj 中的 :env

<小时/>

编辑:我刚刚发现,如果在配置文件中使用 :dev ,不仅 :env 条目会被覆盖.clj。整个 :dev 配置文件将被覆盖。 profiles documentation 对此进行了解释。 :

Remember that if a profile with the same name is specified in multiple locations, only the profile with the highest "priority" is picked – no merging is done. The "priority" is – from highest to lowest – profiles.clj, project.clj, user-wide profiles, and finally system-wide profiles.

因此,在 profiles.clj 中使用 :provided 是围绕 leiningen 配置文件的合并策略的一点黑客

它至少有一个缺点:如果您需要在 project.clj 中定义 :provided 配置文件来指定在运行时环境中可用的依赖项,那么它会被 profiles.clj 中定义的覆盖。

关于clojure - :provided mean in profiles. clj 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471400/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com