pup*_*eno 9 clojure leiningen luminus environ
Luminus现在用这个内容创建一个profiles.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"}}}
Run Code Online (Sandbox Code Playgroud)
做什么:提供在这里做什么?在environ的文档中,似乎有两个条目,一个用于开发,一个用于测试https://github.com/weavejester/environ.
TL; DR:提供的配置文件在profiles.clj中用作dev配置文件的替代,因为如果在那里使用dev,它将覆盖project.clj中指定的整个dev配置文件.
最常见的用途:provided是指定在jar创建期间应该可用的依赖项,但是将由运行时环境提供.但我认为这里有一种方法可以阻止:env在profiles.clj中配置(不打算将其提交到源代码存储库中)来覆盖project.clj中的:env配置.
Luminus公司会使用的:dev配置文件而不是:provided在profiles.clj,如果不是的事实,他们已经把东西在:env在输入:dev个人资料project.clj这将通过什么在被覆盖profiles.clj.
请参阅此示例repo.如果你立即运行它,没有任何改变(:provided在profiles.clj中)输出将是:
› lein run
Hello, world
Db config: some:db://localhost
Run Code Online (Sandbox Code Playgroud)
如果在profiles.clj中更改:provided为,则输出将更改为::dev
› lein run
Hello, nil
Db config: some:db://localhost
Run Code Online (Sandbox Code Playgroud)
他们没有得到合并,但:env在profiles.clj覆盖了:env在profile.clj
编辑:我刚刚发现,:env如果:dev在profiles.clj中使用该条目,不仅会覆盖该条目.整个:dev配置文件将被覆盖.这在配置文件中有解释:
请记住,如果在多个位置指定了具有相同名称的配置文件,则仅选择具有最高"优先级"的配置文件 - 不进行合并."优先级"是 - 从最高到最低 - profiles.clj,project.clj,用户范围的配置文件,最后是系统范围的配置文件.
因此,使用:provided在profiles.clj是一个小黑客周围的leiningen型材的并购战略.
它至少有一个缺点:如果你需要:provided在project.clj中定义一个配置文件来指定将在运行时环境中可用的依赖项,它将被profiles.clj中定义的依赖项覆盖.