Skip to content

Use dotenvx for .env / .env.example management

Description

Actuellement pour la gestion des .env c un peu le bordel:

scripts/sync-with-example-dotenv.ts

s'occupe de sync les vars avec .env, sauf que les valeurs multilignes sont serialisées avec des single quotes. A priori ça marche correctement, mais ça passe pas la validation des vars d'env au startup de l'api parce que les double quotes se retrouvent doublement echappées, jsp si prettier re formatte .env derriere et que ça fout la merde fin c un peu le dawa et en fait t obligé d'aller à la main fix ton .env pour re-mettre des single quotes (comme a pu en faire l'experience @planchetm lol)

le pb est que ya quasi aucune lib qui parse des .env et qui sait gérer les commentaires (pour pas qu'on les perde quand on parse .env et .env.example)

sachant que cette affaire des single quotes est un patch par dessus la seule lib que jai trouvé, dotenv-parser-serializer. C'est un patch parce que j'ai ouvert une PR en juillet 2024 et que heu ouais bah gros vent quoi

j'ai tenté de fix le pb dans !340 (closed) en changeant comment sont sérialisés les .env (plus de guillemets systématiques, et des backticks quand il y a des ", ' ou \n dans la valeur)

parce que d'apres https://github.com/motdotla/dotenv#what-rules-does-the-parsing-engine-follow (package dotenv de npm, tres populaire et surement plus maintenue que le truc obscur qu'on utilise), c'est possible

...sauf que bien sur dotenv-parser-serializer supporte pas les backticks. vu qu'on patch déjà la lib j'ai tenté de rajouter le support des backtciks mais ça marche pas, jsp pk. et un peu flemme de troubleshoot ça tbh.

...mais le paquet dotenv permet lui aussi de parser les .env, sauf que il supporte pas les commentaires...

je suis tombé sur cette issue https://github.com/motdotla/dotenv/issues/840 en cherchant "comments" dans les issues...

...qui redirige vers... "dotenvx"

https://github.com/dotenvx/dotenvx?tab=readme-ov-file#extensions-

et donc ya notamment une commande pour faire un .env.example depuis un .env

encore faut-il savoir si ils ont un truc similaire à ce qu'on fait nous avec ce script, càd:

  • récup les vars d'env du .env.example qui manque au .env (le plus important imo)
  • rajouter a .env.example des vars d'env nouvelles qu'on a ajouté à notre .env pdt le développement d'une feature

yarn cp-env

cette horreur qui existe parce que sveltekit et prisma sont pas foutus d'aller charger un .env en dehors de leur racine. faut revoir si on peut pas leur dire d'aller chercher le .env ailleurs

Comportement attendu/souhaité

pas de cp-env nécéssiare, et pas de pb bizarres avec la synchro au .env.example

Comment reproduire l'anomalie

yarn sync-with-example-dotenv
# magiquement le .env se fait formatter la gueule? comment? au yarn build d'apres matteo et moi ça m'arrive des fois aussi mais je comprends pas quand???
yarn @api dev

Solution possible

Complément de contexte