TL; DR: Il profilo disponibile viene utilizzato in profiles.clj come alternativa al profilo dev, perché se dev sia utilizzata sarebbe sovrascrivere l'intero dev profilo specificato project.clj.
L'uso più comune di :provided
è quello di specificare dipendenze che devono essere disponibili durante la creazione vaso, ma sarà fornito dall'ambiente runtime. Ma penso che qui viene utilizzato come un modo per evitare che il :env
configurato in profiles.clj (che è destinato a non essere impegnati nel codice repository di origine) per sovrascrivere il :env
configurato in project.clj.
Luminus avrebbe usato il profilo, invece di :provided
:dev
in profiles.clj, se non fosse per il fatto che hanno già messo roba in un :env
voce nel profilo :dev
in project.clj che avrebbe essere sovrascritto da ciò che è in profiles.clj.
Vedi this example repo. Se si esegue subito, senza alcuna modifica (con :provided
in profiles.clj) l'uscita sarà:
› lein run
Hello, world
Db config: some:db://localhost
Se si cambia :provided
-:dev
in profiles.clj, i cambiamenti di uscita verso:
› lein run
Hello, nil
Db config: some:db://localhost
Essi non vengono fuse, ma il :env
in profiles.clj sovrascritto la :env
in profilo.CLJ
EDIT: Ho appena scoperto che non solo la voce :env
sarebbe sovrascritto se :dev
è stato utilizzato in profiles.clj. L'intero profilo :dev
verrebbe sovrascritto. Questo è spiegato nel profiles documentation:
Ricordate che se un profilo con lo stesso nome è specificato in più località, solo il profilo con il più alto "priorità" viene raccolto - senza fusione è fatto. La "priorità" è, dal più alto al più basso, profiles.clj, project.clj, profili a livello di utente e infine i profili a livello di sistema.
Quindi, utilizzando :provided
in profiles.clj è un po 'hack attorno alla strategia di fusione di profili Leiningen.
Ha almeno un rovescio della medaglia: se avete bisogno di definire un profilo :provided
in project.clj per specificare le dipendenze che saranno disponibili in ambiente di runtime che sarebbe stato sovrascritto da quello definito nel profiles.clj .
Grazie per la risposta dettagliata!In Luminus abbiamo finito per usare un hack diverso, così da poter modificare hashmaps sia per dev e test in entrambi, project.clj e profiles.clj. – Pablo
Fantastico! Sì, finisci per fare diversi hack per essere in grado di ottenere la promessa di lein-environ di envs configurabile in profiles.clj. Alla fine non ho usato lein-environ (ma continuo a usare environ). Il README di environ suggerisce di usare: dev e: test in profiles.clj senza spiegare che sovrascriverà gli stessi profili in project.clj. Qualcuno dovrebbe modificare questo README spiegando questo piccolo dettaglio :) – nberger
A proposito, c'è già un problema a riguardo in ambiente con un po 'di informazioni utili: https://github.com/weavejester/environ/issues/15. La soluzione che mi piace di più è ridefinire il profilo dev come ': dev [: project/dev: profiles/dev]' – nberger