Mam prosty plik package.json i chcę dodać komentarz. Czy istnieje sposób, aby to zrobić, czy są jakieś hacki, aby to zadziałało?
{
"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 */
}
}
Powyższy przykładowy komentarz nie działa, gdy psuje się npm. Próbowałem też // stylowych komentarzy.
package.json
plików i istniejepackage.json
konkretna odpowiedź na liście mailingowej NodeJS.package.json
. Skomentuj ten problem - być może możemy pokazać, jak przydatne mogą być komentarze.Odpowiedzi:
Ten niedawno został omówiony w node.js listy .
Według Isaaca Schluetera, który stworzył npm:
Podczas korzystania ze zwykłych narzędzi (npm, przędzy itp.) Wiele kluczy „//” zostanie usuniętych. To przetrwa:
To nie przetrwa:
źródło
{ "//": "first", "//": "second"}
uniemożliwia korzystanie znpm version
innych narzędzi wiersza poleceń, które zwykle ponownie analizują cały JSON i odrzucają powielone klucze.package.json
przedmiotu. Na przykład{ "dependencies": { "//": "comment?" }}
jest nieprawidłowy, ale{ "//": "comment!", "dependencies":{}}
ważny."//"
klucz i jego wartość zostaną ostatecznie usunięte. czy istnieje sposób, aby mieć stałe komentarze?Oto kolejny hack dodawania komentarzy w JSON. Od:
Jest równa
Możesz zrobić coś takiego:
źródło
"express": "makes routing better so I don't want to gouge my eyes out", "express": "3.x"
. Tak, „fuj”, jak mówi ColinE, a także „dzięki”, jak mówi ColinE.package.json
programową zmianę , powiedzmy,npm version 1.2.3
by poderwać wersję - zbędne wpisy zostaną usunięte z wynikowego JSON.Po marnowaniu godziny na skomplikowane i zhackowane rozwiązania znalazłem zarówno proste, jak i prawidłowe rozwiązanie do komentowania mojej obszernej sekcji zależności
package.json
. Takie jak to:Po posortowaniu w ten sam sposób, bardzo łatwo jest mi teraz wyśledzić te pary zależności / komentarzy w git commit diffs lub w edytorze podczas pracy z nimi
package.json
.I bez dodatkowych narzędzi, tylko prosty i prawidłowy JSON.
Mam nadzieję, że to pomoże każdemu.
źródło
"scripts": { "postinstall": "echo postinstall stuff goes here", "help-postinstall": "echo helpful stuff goes here" }
Wiele interesujących pomysłów.
To, co robiłem, to:
W ten sposób mogę zarówno przeczytać „pseudo-komentarze” w samym skrypcie, ORAZ także uruchomić coś takiego, jak poniżej, aby zobaczyć jakąś pomoc w terminalu:
Moje 2 centy za tę dyskusję :)
źródło
NPS (skrypty pakietów węzłów) rozwiązał dla mnie ten problem. Umożliwia umieszczenie skryptów NPM w osobnym pliku JS, w którym można dodawać mnóstwo komentarzy i dowolną inną logikę JS, której potrzebujesz. https://www.npmjs.com/package/nps
Próbka
package-scripts.js
jednego z moich projektówWłaśnie zrobiłem instalację lokalną
npm install nps -save-dev
i umieściłem to w moichpackage.json
skryptach.źródło
Zawsze możesz nadużyć faktu, że zduplikowane klucze są zastępowane. Oto co właśnie napisałem:
Nie jest jednak jasne, czy JSON zezwala na duplikaty kluczy (zobacz Czy składnia JSON zezwala na duplikaty kluczy w obiekcie?. Wygląda na to, że działa z npm, więc podejmuję ryzyko.
Zalecanym włamaniem jest użycie
"//"
kluczy (z listy mailingowej nodejs ). Kiedy go przetestowałem, nie działało to jednak z sekcjami „zależności”. Również przykład w poście używa wielu"//"
kluczy, co oznacza, że npm nie odrzuca plików JSON ze zduplikowanymi kluczami. Innymi słowy, powyższy hack powinien zawsze być w porządku.Aktualizacja: Jedną z denerwujących wad hackowania powielonego klucza jest to
npm install --save
dyskretnie eliminuje wszystkie duplikaty. Niestety bardzo łatwo to przeoczyć, a twoje dobre intencje zniknęły."//"
Hack jest nadal najbezpieczniejszym jak się wydaje. Jednak komentarze wielowierszowe również zostaną usuniętenpm install --save
.źródło
"//"
Hack nie działa wewnątrz devDependencies. NPM próbuje rozwiązać ścieżkę UNC.mocha
atrybutu. Wystarczy dodać więcej niż jeden z nich i na końcu zostanie użyty przez npm.Mam zabawny pomysł na hack.
Utwórz na przykład nazwę pakietu npm jako dzielnik komentarzy
dependencies
idevDependencies
zablokuj na przykład w pliku package.jsonx----x----x
UWAGA : Należy dodać linię podziału ostatniego komentarza z prawidłową wersją jak
*
w bloku.źródło
npm install
(używając npm 5) moje zduplikowane klucze zostały automatycznie usunięte :(Zainspirowany tym wątkiem, oto czego używamy :
źródło
Jak dotąd większość „hacków” sugeruje nadużywanie JSON. Ale zamiast tego dlaczego nie nadużywać podstawowego języka skryptowego?
Edytuj Pierwszą odpowiedzią było umieszczenie opisu po prawej stronie za pomocą
# add comments here
owijania go; nie działa to jednak w systemie Windows, ponieważ flagi (np. npm uruchom myframework - --myframework-flags) zostaną zignorowane. Zmieniłem odpowiedź, aby działała na wszystkich platformach, i dodałem kilka wcięć w celu zapewnienia czytelności.Spowoduje to:
npm run myframework -- --help
npm run
(które jest właściwym poleceniem do uruchomienia w celu uzyskania informacji o dostępnych skryptach)package.json
(przy użyciuless
lub ulubionego IDE)źródło
&&
zamiast;
tak pierwsze polecenie staje się:"help": "echo 'Display help information (this screen)' && npm run",
scripts
sekcji.package.json
jest wiele innych rzeczy.Oto moje zdanie na temat komentarzy w
package.json
/bower.json
:Mam,
package.json.js
że zawiera skrypt, który eksportuje rzeczywistepackage.json
. Uruchomienie skryptu zastępuje starepackage.json
i mówi mi, jakie zmiany zostały wprowadzone, idealne, aby pomóc Ci śledzić automatyczne zmianynpm
. W ten sposób mogę nawet programowo zdefiniować, których pakietów chcę używać.Najnowsze zadanie gruntu jest tutaj: https://gist.github.com/MarZab/72fa6b85bc9e71de5991
źródło
npm install --save
lub--save-dev
?Skończyło się
scripts
tak:Moim zamiarem nie jest tutaj wyjaśnienie jednej linii, a jedynie posiadanie pewnego rodzaju separatorów między moimi skryptami dla backendu, frontendu itp.
Nie jestem wielkim fanem 1a, 1b, 1c, 2a, ... ale klawisze są inne i nie mam z tym żadnego problemu.
źródło
Jak wyjaśnia ta odpowiedź ,
//
klucz został zarezerwowany, więc można go używać konwencjonalnie do komentowania. Problem z//
komentarzem jest to, że nie może być stosowany wdependencies
idevDependencies
jak regularne uzależnienia sznurkiem w wersji przymusu:wywołuje błąd,
Chociaż klucze z wartościami nieciągowymi są uważane za nieprawidłowe zależności i są skutecznie ignorowane:
Zależność można skomentować w ten sam sposób:
Ponieważ zależności są sortowane, gdy pakiet.json jest modyfikowany przez NPM, niepraktyczne jest umieszczanie komentarza powyżej zależności, do której się odnosi:
Klucz komentarza powinien zostać odpowiednio nazwany, jeśli odnosi się do określonej linii, więc nie zostanie przeniesiony:
Komentarz mający zastosowanie do konkretnej zależności można dodać jako część semver:
Zauważ, że jeśli pierwsza część
OR
nie pasuje, komentarz może zostać przeanalizowany, np1.x
.Te obejścia są kompatybilne ze wszystkimi aktualnymi wersjami NPM (6 i niższymi).
źródło
Ponieważ większość programistów zna dokumentację opartą na znacznikach / adnotacjach, konwencja, z której zacząłem korzystać, jest podobna. Oto smak:
Uwaga: W przypadku
dependencies
,devDependencies
itp sekcjach, adnotacje komentarz nie może być dodany bezpośrednio nad poszczególnymi zależnościami pakietów wewnątrz obiektu konfiguracji ponieważnpm
spodziewa się klucz do być nazwa pakietu npm. Stąd przyczyna@comment dependencies
.Uwaga: W niektórych kontekstach, na przykład w obiekcie skryptów, niektórzy redaktorzy / IDE mogą narzekać na tablicę. W kontekście skryptów VS Code oczekuje ciągu wartości - nie tablicy.
Podoba mi się sposób dodawania komentarzy do JSON w stylu adnotacji / tagu, ponieważ
@
symbol wyróżnia się od zwykłych deklaracji.źródło
Podsumowując wszystkie te odpowiedzi:
Dodaj jedno pole najwyższego poziomu o nazwie,
//
które zawiera ciąg komentarza. To działa, ale jest do bani, ponieważ nie można umieszczać komentarzy w pobliżu tego, co komentują.Dodaj wiele pól najwyższego poziomu, zaczynając od
//
, np.//dependencies
Zawierających ciąg komentarza. Jest to lepsze, ale nadal pozwala tylko na komentarze na najwyższym poziomie. Nie możesz komentować poszczególnych zależności.Dodaj
echo
polecenia do swojegoscripts
. To działa, ale jest do bani, ponieważ można go używać tylko wscripts
.Te rozwiązania również nie są zbyt czytelne. Dodają mnóstwo wizualnego szumu, a IDE nie podświetlą ich jako komentarzy.
Myślę, że jedynym rozsądnym rozwiązaniem jest wygenerowanie
package.json
z innego pliku. Najprostszym sposobem jest napisanie JSON jako Javascript i użycie Node do napisaniapackage.json
. Zapisz ten plik jakopackage.json.mjs
,chmod +x
a następnie możesz go uruchomić, aby go wygenerowaćpackage.json
.Używa
//
klucza, aby ostrzec ludzi przed edycją.\x40generated
jest celowe. Zmienia się@generated
wpackage.json
i oznacza, że niektóre systemy przeglądania kodu domyślnie zwiną ten plik.To dodatkowy krok w twoim systemie kompilacji, ale pokonuje wszystkie inne hacki tutaj.
źródło
Gdy zduplikowane klucze komentarza są usuwane przy użyciu narzędzi package.json (npm, przędza itp.), Zacząłem używać wersji z haszowaniem, która pozwala na lepszy odczyt, ponieważ wiele wierszy i kluczy, takich jak
który jest „prawidłowy” według mojego IDE jako klucza głównego, ale w
dependencies
nim narzeka, oczekując wartości ciągu.źródło
//
klucz jest wszędzie, nie jest to naprawdę dobry zamiennik dla komentarzy, szczególnie gdy komentarze mogą mieć ładne podświetlanie składni za pomocą edytora itp.Kolejny hack. Stworzyłem skrypt do czytania
package.json
jako kontekst dla szablonu kierownicy.Kod poniżej na wypadek, gdyby ktoś uznał to podejście za przydatne:
plik szablonu kierownicy
package-json-comments.hbs
źródło
Dla npm package.json znalazłem 2 sposoby (po przeczytaniu tej rozmowy):
Ale wraz z aktualizacją lub ponowną instalacją pakietu za pomocą „--save” lub „--save-dev, skomentuj jak„ ^ 4.1.0! komentarz "w odpowiednim miejscu zostanie usunięty. A wszystko to złamie npm audyt.
źródło
del-comment
ienvify-comment
?Moje zdanie na temat braku komentarzy w JSON. Tworzę nowe węzły, nazwane od węzłów, do których się odnoszą, ale z prefiksem. Jest to niedoskonałe, ale funkcjonalne.
źródło
start_comment
byłoby lepsze, ponieważ wtedy uporządkuje alfabetycznie