Was sind die wichtigsten Änderungen in dotenv-linter v3.0.0?
Wir haben dotenv-linter entwickelt — ein nützliches Tool zur Überprüfung von .env
-Dateien. Es hilft dabei, Probleme in .env
-Dateien zu finden, die Sie vielleicht zunächst übersehen, welche aber später zu fehlerhaftem Verhalten in Anwendungen führen können. Wir haben das Tool universell gestaltet, sodass die Verbindung mit jedem Projekt unabhängig von der Programmiersprache möglich ist. Dotenv-linter
wird als Open-Source-Projekt von Mikhail Grachev, einem Softwareingenieur von Evrone, entwickelt.
Was ist eine .env
-Datei?
Eine .env
- oder dotenv
-Datei ist eine einfache Textdatei, die alle Umgebungsvariablen eines Projekts enthält. Die Speicherung der Konfiguration in den Umgebungsvariablen ist einer der Grundsätze des „Twelve-Factor App“-Manifests. Die .env
-Datei nutzt ein schlichtes Schlüssel-Wert-Format, z. B.: FOO=BAR
Wir haben bereits etwas zu dotenv-linter v2.2.0 geschrieben. Seitdem sind zweieinhalb Monate vergangen und wir sind bereit, Ihnen eine neue Version von dotenv-linter
zu präsentieren — v3.0.0. Im Folgenden finden Sie eine Übersicht über die wichtigsten Änderungen in diesem Release!
API-Verbesserungen 👍
In der vorherigen Version bot dotenv-linter
mehrere Flags an, die im Wesentlichen separate Befehle waren, --fix
und --show-checks
:
FLAGS:
-f, --fix Automatically fixes warnings
-h, --help Prints help information
--no-backup Prevents .env files from being backed up when modified by -f/--fix
-q, --quiet Doesn't display additional information
-r, --recursive Recursively search and check .env files
--show-checks Shows list of available checks
-v, --version Prints version information
Dies hat für etwas Verwirrung gesorgt. Diese Flags kollidierten miteinander und funktionierten in Kombination nicht unbedingt gut:
$ dotenv-linter --fix --show-checks
In der neuen Version haben wir dies behoben und die Flags --fix
und --show-checks
in die separaten Befehle fix
und list
commands:
FLAGS:
-h, --help Prints help information
-q, --quiet Doesn't display additional information
-r, --recursive Recursively searches and checks .env files
-v, --version Prints version information
SUBCOMMANDS:
fix Automatically fixes warnings [aliases: f]
list Shows list of available checks [aliases: l]
Vergleich von .env-Dateien 🤲
Außerdem haben wir in der aktualisierten Version den neuen Befehl compare
hinzugefügt, mit dem Sie Schlüssel in.env
-Dateien vergleichen können:
$ dotenv-linter compare .env .env.example
Comparing .env
Comparing .env.example
.env is missing keys: BAR
.env.example is missing keys: FOO
Anzeige gescannter Dateien 👀
Im Falle der Präsenz mehrerer .env
-Dateien war nicht immer klar, welche von dotenv-linter
geprüft wurden und welche nicht. Dies konnte an einem nicht standardmäßigen Dateinamen liegen oder daran, dass es in diesen Dateien keine Probleme gab. In der neuen Version haben wir eine Anzeige für gescannte Dateien hinzugefügt:
$ dotenv-linter
Checking .env
.env:1 LeadingCharacter: Invalid leading character detected
Checking .env.example
Checking .env.test
Found 1 problem
Sie können dies über den Flag --quiet/-q
deaktivieren:
$ dotenv-linter --quiet
.env:1 LeadingCharacter: Invalid leading character detected
Farbige Ausgabe 🌈
Um die Benutzerfreundlichkeit zu verbessern, haben wir eine farbige Warnanzeige hinzugefügt:
Sie können die farbige Ausgabe über den Flag --no-color
deaktivieren.
Unterstützung für mehrzeilige Werte 💪
In .env
-Dateien können mehrzeilige Werte gespeichert werden. Eine der Optionen sieht so aus:
# .env
MULTILINE="new\nline"
Doch bei der Überprüfung solcher Werte hat dotenv-linter
in der Vergangenheit eine Warnung angezeigt:
$ dotenv-linter
.env:1 QuoteCharacter: The value has quote characters (', ")
Found 1 problem
Wir haben dies behoben und nun gibt dotenv-linter
keine Warnungen mehr für mehrzeilige, in Anführungszeichen eingeschlossene Werte aus.
SUnterstützung für das Präfix export
🔥
Einige Bibliotheken für die Arbeit mit .env
-Dateien wie z. B. dotenv
, godotenv
und python-dotenv
unterstützen das Präfix export
:
# .env
export S3_BUCKET=YOURS3BUCKET
export SECRET_KEY=YOURSECRETKEYGOESHERE
Das Präfix export
ermöglicht den Export von Umgebungsvariablen aus einer Datei über den Befehl source
:
$ source .env
Bei der Überprüfung solcher Dateien hat dotenv-linter
stets Warnungen angezeigt:
$ dotenv-linter
.env:1 IncorrectDelimiter: The export S3_BUCKET key has incorrect delimiter
.env:1 LowercaseKey: The export S3_BUCKET key should be in uppercase
.env:2 IncorrectDelimiter: The export SECRET_KEY key has incorrect delimiter
.env:2 LowercaseKey: The export SECRET_KEY key should be in uppercase
Found 4 problems
In der neuen Version haben wir Unterstützung für das Präfix export
hinzugefügt und nun gibt dotenv-linter
keine Warnungen mehr aus.
Unterstützung für Leerzeichen 🙌
Eine weitere Verbesserung stellt die Unterstützung von Leerzeichen in Werten dar, die in Anführungszeichen eingeschlossen sind:
# .env
WHITESPACES="a b c"
Für derartige Werte zeigt dotenv-linter
ab sofort keine Warnungen mehr an.
Verbesserte Validierung 👌
Darüber hinaus haben wir ein Problem behoben, bei dem dotenv-linter
nicht alle Warnungen auf einmal ausgegeben hat:
$ dotenv-linter fix .env
Fixing .env
Original file was backed up to: ".env_1606422805"
.env:1 KeyWithoutValue: The test key should be with a value or have an equal sign
All warnings are fixed. Total: 1
$ dotenv-linter .env
Checking .env
.env:1 LowercaseKey: The test key should be in uppercase
Found 1 problem
Leistungsoptimierungen 🚀
Zu guter Letzt haben wir die Performance von dotenv-linter
. optimiert, die sich schon zuvor auf einem hohen Niveau befand. Die maximale Startzeit hat sich von 9,3 ms auf 4,3 ms verringert (um mehr als 50 %).
Um dies zu überprüfen, haben wir eine Benchmark mit dem Utility hyperfine
durchgeführt:
Command Mean [ms] Min [ms] Max [ms] Relative
dotenv-linter/dotenv-linter .env 2.7 ± 0.4 2.0 4.3 1.00
wemake-services/dotenv-linter .env 162.6 ± 12.1 153.0 201.3 60.83 ± 10.20
Dies sind die wichtigsten Änderungen des neuen Release v3.0.0. Vielen Dank an alle, die dazu beigetragen haben! Sie können das Projekt unterstützen, indem Sie es auf GitHub mit einem Stern versehen oder sponsern.
Es steht Ihnen frei, ein Sponsor auf GitHub Sponsors oder OpenCollective zu werden ❤️