Ich habe eine einfache package.json-Datei und möchte einen Kommentar hinzufügen. Gibt es eine Möglichkeit, dies zu tun, oder gibt es Hacks, um dies zum Laufen zu bringen?
{
"name": "My Project",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x",
"mongoose": "3.x"
},
"devDependencies" : {
"should": "*"
/* "mocha": "*" not needed as should be globally installed */
}
}
Der obige Beispielkommentar funktioniert nicht, wenn npm unterbrochen wird. Ich habe auch versucht, Kommentare im // Stil zu verfassen.
package.json
Dateien ist und es einepackage.json
spezifische Antwort auf der NodeJS-Mailingliste gibt.package.json
. Bitte kommentieren Sie dieses Problem - vielleicht können wir zeigen, wie nützlich Kommentare sein können.Antworten:
Dies wurde kürzlich in der Mailingliste node.js erläutert .
Laut Isaac Schlueter, der npm erstellt hat:
Bei Verwendung Ihrer üblichen Werkzeuge (npm, Garn usw.) werden mehrere "//" Schlüssel entfernt. Das überlebt:
Dies wird nicht überleben:
quelle
{ "//": "first", "//": "second"}
die Verwendungnpm version
anderer Befehlszeilen-Utils verhindert, die normalerweise den gesamten JSON-Code reparieren und die in Bearbeitung befindlichen doppelten Schlüssel verwerfen.package.json
Objekts verwendet werden kann. Zum Beispiel{ "dependencies": { "//": "comment?" }}
ist ungültig, aber{ "//": "comment!", "dependencies":{}}
gültig."//"
Schlüssel und sein Wert irgendwann gelöscht. Gibt es eine Möglichkeit, dauerhafte Kommentare zu haben?Hier ist ein weiterer Hack zum Hinzufügen von Kommentaren in JSON. Schon seit:
Ist äquivalent zu
Sie können so etwas tun wie:
quelle
"express": "makes routing better so I don't want to gouge my eyes out", "express": "3.x"
. Also ja, "yuck" wie ColinE sagt, und auch "danke" wie ColinE sagt.package.json
Programm jemals programmatisch ändern , z. B. umnpm version 1.2.3
die Version zu verbessern. Die redundanten Einträge werden aus dem resultierenden JSON entfernt.Nachdem ich eine Stunde mit komplexen und hackigen Lösungen verbracht habe, habe ich sowohl eine einfache als auch eine gültige Lösung gefunden, um meinen Abschnitt über umfangreiche Abhängigkeiten in zu kommentieren
package.json
. Genau wie dieser:Wenn ich auf die gleiche Weise sortiere, ist es für mich jetzt sehr einfach, diese Paare von Abhängigkeiten / Kommentaren entweder in Git Commit Diffs oder im Editor zu verfolgen, während ich mit arbeite
package.json
.Und keine zusätzlichen Tools, nur einfaches und gültiges JSON.
Hoffe das hilft jedem.
quelle
"scripts": { "postinstall": "echo postinstall stuff goes here", "help-postinstall": "echo helpful stuff goes here" }
Viele interessante Ideen.
Was ich getan habe, ist Folgendes:
Auf diese Weise kann ich sowohl die "Pseudokommentare" im Skript selbst lesen als auch Folgendes ausführen, um eine Art Hilfe im Terminal zu sehen:
Meine 2 Cent für diese Diskussion :)
quelle
NPS (Node Package Scripts) hat dieses Problem für mich gelöst. Hiermit können Sie Ihre NPM-Skripte in eine separate JS-Datei einfügen, in der Sie zahlreiche Kommentare und jede andere JS-Logik hinzufügen können, die Sie benötigen. https://www.npmjs.com/package/nps
Beispiel
package-scripts.js
aus einem meiner ProjekteIch habe gerade eine lokale Installation durchgeführt
npm install nps -save-dev
und diese in meinepackage.json
Skripte eingefügt.quelle
Sie können jederzeit die Tatsache missbrauchen, dass doppelte Schlüssel überschrieben werden. Das habe ich gerade geschrieben:
Es ist jedoch nicht klar, ob JSON doppelte Schlüssel zulässt (siehe Erlaubt die JSON-Syntax doppelte Schlüssel in einem Objekt? Es scheint mit npm zu funktionieren, daher gehe ich das Risiko ein.
Der empfohlene Hack besteht darin,
"//"
Schlüssel zu verwenden (aus der Mailingliste von nodejs ). Als ich es getestet habe, hat es jedoch nicht mit Abschnitten "Abhängigkeiten" funktioniert. Das Beispiel in diesem Beitrag verwendet außerdem mehrere"//"
Schlüssel, was bedeutet, dass npm JSON-Dateien mit doppelten Schlüsseln nicht ablehnt. Mit anderen Worten, der obige Hack sollte immer in Ordnung sein.Update: Ein ärgerlicher Nachteil des duplizierten Schlüssel-Hacks ist, dass
npm install --save
alle Duplikate stillschweigend entfernt werden. Leider ist es sehr leicht zu übersehen und Ihre gut gemeinten Kommentare sind weg.Der
"//"
Hack ist immer noch der sicherste, wie es scheint. Mehrzeilige Kommentare werden jedoch auch von entferntnpm install --save
.quelle
"//"
Hack funktioniert nicht innerhalb von devDependencies. NPM versucht, einen UNC-Pfad aufzulösen.mocha
Attribut nicht kommentiert werden. Nur kann es mehr als eine davon hinzufügen und wird am Ende von npm verwendet.Ich habe eine lustige Hack-Idee.
Erstellen Sie beispielsweise einen npm-Paketnamen als Kommentarteiler für
dependencies
unddevDependencies
blockieren Sie ihn beispielsweise in package.jsonx----x----x
HINWEIS : Die letzte Kommentarteilerzeile muss mit einer gültigen Version wie
*
im Block hinzugefügt werden .quelle
npm install
(mit npm 5) ausgeführt hatte, wurden meine doppelten Schlüssel automatisch entfernt :(Inspiriert von diesem Thread verwenden wir Folgendes :
quelle
Bisher schlagen die meisten "Hacks" hier vor, JSON zu missbrauchen. Aber warum nicht die zugrunde liegende Skriptsprache missbrauchen?
Bearbeiten Die erste Antwort bestand darin, die Beschreibung rechts
# add comments here
zu platzieren, um sie zu verpacken. Dies funktioniert jedoch nicht unter Windows, da Flags (z. B. npm run myframework - --myframework-flags) ignoriert werden. Ich habe meine Antwort geändert, damit sie auf allen Plattformen funktioniert, und aus Gründen der Lesbarkeit einige Einrückungen hinzugefügt.Dieser Wille:
npm run myframework -- --help
npm run
(dies ist der eigentliche Befehl, der ausgeführt werden muss, um Informationen zu verfügbaren Skripten abzurufen).package.json
(mitless
oder Ihrer Lieblings-IDE)quelle
&&
Stattdessen wird;
der erste Befehl:"help": "echo 'Display help information (this screen)' && npm run",
scripts
Sektion.package.json
ist viele andere Dinge.Hier ist meine Meinung zu Kommentaren in
package.json
/bower.json
:Ich habe
package.json.js
das enthält ein Skript, das das tatsächliche exportiertpackage.json
. Durch das Ausführen des Skripts wird das alte überschriebenpackage.json
und es wird mir mitgeteilt, welche Änderungen vorgenommen wurden. Dies ist ideal, um den Überblick über die automatisch vorgenommenen Änderungennpm
zu behalten . Auf diese Weise kann ich sogar programmgesteuert definieren, welche Pakete ich verwenden möchte.Die neueste Grunzaufgabe ist hier: https://gist.github.com/MarZab/72fa6b85bc9e71de5991
quelle
npm install --save
oder ändern--save-dev
?Am Ende hatte ich
scripts
so etwas:Meine Absicht hier ist nicht, eine Zeile zu klären, sondern nur eine Art Trennzeichen zwischen meinen Skripten für Backend, Frontend, alle usw. zu haben.
Ich bin kein großer Fan von 1a, 1b, 1c, 2a, ... aber die Tasten sind unterschiedlich und ich habe überhaupt kein Problem damit.
quelle
Wie in dieser Antwort erläutert, wurde der
//
Schlüssel reserviert, sodass er herkömmlicherweise für Kommentare verwendet werden kann. Das Problem mit//
Kommentaren ist, dass sie nicht independencies
unddevDependencies
als reguläre Abhängigkeit mit einer Zeichenfolge als Versionsbeschränkung verwendet werden können:löst einen Fehler aus,
Obwohl Schlüssel mit Nicht-Zeichenfolgenwerten als ungültige Abhängigkeiten betrachtet und effizient ignoriert werden:
Eine Abhängigkeit selbst kann auf die gleiche Weise auskommentiert werden:
Da Abhängigkeiten sortiert werden, wenn package.json von NPM geändert wird, ist es unpraktisch, einen Kommentar über eine Abhängigkeit zu setzen, auf die verwiesen wird:
Der Kommentarschlüssel sollte entsprechend benannt werden, wenn er sich auf eine bestimmte Zeile bezieht, damit er nicht verschoben wird:
Ein Kommentar, der auf bestimmte Abhängigkeiten anwendbar ist, kann als Teil von semver hinzugefügt werden:
Beachten Sie, dass
OR
ein Kommentar analysiert werden kann , wenn der erste Teil zuvor nicht übereinstimmt, z1.x
.Diese Problemumgehungen sind mit allen aktuellen NPM-Versionen (6 und niedriger) kompatibel.
quelle
Da die meisten Entwickler mit der auf Tags / Anmerkungen basierenden Dokumentation vertraut sind, ist die von mir verwendete Konvention ähnlich. Hier ist ein Vorgeschmack:
Hinweis: Für die
dependencies
,devDependencies
usw Abschnitte, die Kommentars Anmerkungen können nicht direkt über den einzelnen Paketabhängigkeiten in dem Konfigurationsobjekt hinzugefügt werden , danpm
den Schlüssel erwartet der Name eines npm Paket zu sein. Daher der Grund für die@comment dependencies
.Hinweis: In bestimmten Kontexten, z. B. im Skriptobjekt, können sich einige Editoren / IDEs über das Array beschweren. Im Skriptkontext erwartet VS Code eine Zeichenfolge für den Wert - kein Array.
Ich mag die Annotation / Tag-Stil-Art, Kommentare zu JSON hinzuzufügen, weil sich das
@
Symbol von den normalen Deklarationen abhebt.quelle
Um alle diese Antworten zusammenzufassen:
Fügen Sie ein einzelnes Feld der obersten Ebene hinzu
//
, das eine Kommentarzeichenfolge enthält. Dies funktioniert, ist aber zum Kotzen, weil Sie keine Kommentare in die Nähe des Kommentars setzen können.Fügen Sie mehrere Felder der obersten Ebene hinzu , beginnend mit
//
, z. B.//dependencies
die eine Kommentarzeichenfolge enthalten. Dies ist besser, aber Sie können trotzdem nur Kommentare auf höchster Ebene abgeben. Sie können einzelne Abhängigkeiten nicht kommentieren.Fügen Sie
echo
Ihrem Befehl Befehle hinzuscripts
. Dies funktioniert, aber es ist scheiße, weil Sie es nur in verwenden könnenscripts
.Diese Lösungen sind auch alle nicht sehr gut lesbar. Sie fügen eine Menge visuelles Rauschen hinzu und IDEs werden sie durch die Syntax nicht als Kommentare hervorheben.
Ich denke, die einzig vernünftige Lösung besteht darin, die
package.json
aus einer anderen Datei zu generieren . Am einfachsten ist es, Ihren JSON als Javascript zu schreiben und ihn mit Node zu schreibenpackage.json
. Speichern Sie diese Datei alspackage.json.mjs
,chmod +x
und dann können Sie sie einfach ausführen, um Ihre zu generierenpackage.json
.Es verwendet den
//
Schlüssel, um Personen vor dem Bearbeiten zu warnen.\x40generated
ist absichtlich. Es wird zu@generated
Inpackage.json
und bedeutet, dass einige Codeüberprüfungssysteme diese Datei standardmäßig reduzieren.Es ist ein zusätzlicher Schritt in Ihrem Build-System, aber es schlägt alle anderen Hacks hier.
quelle
Da doppelte Kommentarschlüssel mit den Tools package.json (npm, Garn usw.) entfernt werden, habe ich eine Hash-Version verwendet, die ein besseres Lesen als mehrere Zeilen und Schlüssel ermöglicht
Das ist laut meiner IDE als Root-Schlüssel 'gültig',
dependencies
beschwert sich aber darin, einen String-Wert zu erwarten.quelle
//
Schlüssel überall, es ist nicht wirklich ein guter Ersatz für Kommentare, besonders wenn Kommentare eine nette Syntaxhervorhebung mit einem Editor usw. haben könnenNoch ein Hack. Ich habe ein Skript erstellt, das
package.json
als Kontext für eine Lenkervorlage gelesen werden kann .Code unten, falls jemand diesen Ansatz nützlich findet:
Lenkervorlagendatei
package-json-comments.hbs
quelle
Für npm package.json wurden zwei Möglichkeiten gefunden (nach dem Lesen dieser Konversation):
Aber mit dem Update oder der Neuinstallation des Pakets mit "--save" oder "--save-dev" kommentieren Sie wie "^ 4.1.0! Kommentar "an der entsprechenden Stelle wird gelöscht. Und all dies wird npm Audit gebrochen.
quelle
del-comment
und zu installierenenvify-comment
?Ich nehme die Frustration über keine Kommentare in JSON auf. Ich erstelle neue Knoten, die nach den Knoten benannt sind, auf die sie verweisen, denen jedoch Unterstriche vorangestellt sind. Dies ist unvollkommen, aber funktional.
quelle
start_comment
wäre besser, denn dann wird es alphabetisch sortiert