Ich schäme mich ein wenig, dass ich selbst keine gute Lösung dafür finde, aber leider.
Mit npm haben wir im Allgemeinen eine package.json
Datei mit einem scripts
Segment zum Speichern der Aufgaben, die unsere Toolchain routinemäßig ausführen soll, z. B.:
"scripts": {
"build": "webpack --env production",
"start": "webpack-dev-server"
}
Nun haben wir möglicherweise Teile unserer Toolchain aktualisiert – in diesem Beispiel webpack – und plötzlich erhalten wir eine Meldung wie diese:
(node:10868) [DEP_WEBPACK_DEPRECATION_ARRAY_TO_SET] DeprecationWarning: Compilation.modules was changed from Array to Set (using Array method 'reduce' is deprecated)
(Use `node --trace-deprecation ...` to show where the warning was created)
So wie es ist, ist es für die Diagnose und Lösung des Problems völlig nutzlos. Irgendetwas in einem Build-Skript stimmt nicht. ... Juhu!
Zumindest im Fall von Webpack und seinen Plugins können wir durch Aufrufen über die CLI eine recht nützliche Ablaufverfolgungsausgabe erhalten:
node --trace-deprecation node_modules/webpack/bin/webpack.js --env production
Eine ziemlich umständliche Zeile, nicht wahr? Es gibt eine ganze Reihe von Gründen, warum wir dies wirklich vermeiden wollen. In keiner bestimmten Reihenfolge:
- Insbesondere Abwertungen sind eine einzelne, farblose Linie in einem Meer farbcodierter Nachrichten - leicht zu übersehen
- Wir müssen das Projekt aufbauenwiedernachdem ich die Abwertung bemerkt hatte
- im Skript verwenden wir einfach den Namen unseres gewünschten Build-Tools, hier müssen wir den vollständigen relativen Pfad angeben
- wir müssen die gewünschten Parameter von unserer
package.json
in die CLI kopieren (wenn z. B. unterschiedliche Umgebungen unterschiedliche Plugins aktivieren - kein allgemeiner Anwendungsfall und daher leicht zu übersehen, selbst wenn ein Programmierer bereits auf die Idee gekommen ist, mit Abwertungen umzugehen)- aufgrund der hinzugefügten
.js
können wir nicht einfach den gesamten Skriptkörper kopieren
- aufgrund der hinzugefügten
- pure, unverfälschte Faulheit
Also...
- Gibt es eine Möglichkeit,
--trace-deprecation
denscripts
Teil von zu aktivierenpackage.json
? - Wenn nicht, gibt es eine Möglichkeit, alternative Build-Skriptquellen zu verwenden, z. B. überNPS?
... Ich schätze, ich könnte den Knotenaufruf immer in eine separate Batchdatei einfügen, aber ich würde viel lieber einen einzigen Ort verwenden, an dem ich alle Build-Skripte verwalten kann.
Vorgesehener Anwendungsfall:
Ich möchte, dass diese Option beim lokalen Erstellen und wahrscheinlich auch bei ausgewählten CI-Zweigen immer aktiviert ist, sodass ich die vollständige Ablaufverfolgung direkt in das Protokoll ausgeben und den Schritt als instabil markieren kann. Ein dediziertes NPM-Skript „build:trace“ oder ähnliches scheint die direkte Lösung zu sein –Wennes ist möglich.
Antwort1
Ja, tatsächlich – Sie können viele Knoten-CLI-Flags als Umgebungsvariablen übergeben, die in einen scripts
Befehl integriert werden können. Beispiel:
"build": "NODE_OPTIONS='--trace-deprecation' webpack",
Informationen dazu, welche Flags unterstützt werden, finden Sie unter:https://nodejs.org/api/cli.html#node_optionsoptionen
Außerdem funktioniert das bloße Voranstellen der Umgebungsvariable auf diese Weise unter Windows nicht. Wenn Sie plattformübergreifende Umgebungsvariablen in Ihren scripts
Feldern haben möchten, ist die beste Lösung, die ich kenne,umgebungsübergreifend.