Eu tenho um arquivo package.json simples e quero adicionar um comentário. Existe uma maneira de fazer isso ou existem hacks para fazer isso funcionar?
{
"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 */
}
}
O comentário de exemplo acima não funciona como quebra de npm. Eu também tentei // comentários de estilo.
package.json
arquivos e há umapackage.json
resposta específica na lista de discussão do NodeJS.package.json
. Por favor, comente sobre essa questão - talvez possamos mostrar como os comentários podem ser úteis.Respostas:
Este foi recentemente discutido na lista de discussão node.js .
De acordo com Isaac Schlueter, que criou o npm:
Ao usar suas ferramentas habituais (npm, fios, etc), várias chaves "//" serão removidas. Isso sobrevive:
Isso não vai sobreviver:
fonte
{ "//": "first", "//": "second"}
impede o uso denpm version
outros utilitários de linha de comando que geralmente analisam JSON inteiro e descartam as chaves duplicadas em processo.package.json
objeto. Por exemplo,{ "dependencies": { "//": "comment?" }}
é inválido, mas{ "//": "comment!", "dependencies":{}}
é válido."//"
chave e seu valor são apagados eventualmente. existe uma maneira de ter comentários permanentes?Aqui está outro truque para adicionar comentários em JSON. Desde a:
É equivalente a
Você pode fazer algo como:
fonte
"express": "makes routing better so I don't want to gouge my eyes out", "express": "3.x"
. Então, sim, "eca", como diz o ColinE, e também "obrigado", como diz o ColinE.package.json
maneira programática, digamos,npm version 1.2.3
para aumentar a versão - as entradas redundantes serão removidas do JSON resultante.Após desperdiçar uma hora em soluções complexas e hacky, encontrei uma solução simples e válida para comentar minha seção de dependências volumosas
package.json
. Bem assim:Quando ordenado da mesma maneira, agora é muito fácil para mim rastrear esses pares de dependências / comentários no diff do git commit ou no editor enquanto estiver trabalhando
package.json
.E não há ferramentas extras envolvidas, apenas JSON simples e válido.
Espero que isso ajude alguém.
fonte
"scripts": { "postinstall": "echo postinstall stuff goes here", "help-postinstall": "echo helpful stuff goes here" }
Muitas idéias interessantes.
O que tenho feito é o seguinte:
Dessa forma, eu posso ler os "pseudo-comentários" no próprio script, E também executar algo como o seguinte, para ver algum tipo de ajuda no terminal:
Meus 2 centavos para esta discussão :)
fonte
O NPS (scripts de pacote de nós) resolveu esse problema para mim. Permite colocar seus scripts do NPM em um arquivo JS separado, onde você pode adicionar muitos comentários e qualquer outra lógica JS necessária. https://www.npmjs.com/package/nps
Amostra do
package-scripts.js
de um dos meus projetosAcabei de fazer uma instalação local
npm install nps -save-dev
e coloquei isso nos meuspackage.json
scripts.fonte
Você sempre pode abusar do fato de que chaves duplicadas são substituídas. Isto é o que eu acabei de escrever:
No entanto, não está claro se o JSON permite chaves duplicadas (consulte A sintaxe JSON permite chaves duplicadas em um objeto? Parece funcionar com o npm, por isso, corro o risco.
O truque recomendado é usar
"//"
chaves (da lista de discussão nodejs ). Quando o testei, ele não funcionou com as seções "dependências". Além disso, o exemplo na postagem usa vários"//"
chaves, o que implica que o npm não rejeita arquivos JSON com chaves duplicadas. Em outras palavras, o hack acima deve sempre ser bom.Atualização: Uma desvantagem irritante do hack de chave duplicada é que
npm install --save
elimina silenciosamente todas as duplicatas. Infelizmente, é muito fácil esquecer isso e seus comentários bem-intencionados desaparecem.O
"//"
hack ainda é o mais seguro que parece. No entanto, os comentários com várias linhas também serão removidosnpm install --save
.fonte
"//"
hack não funciona dentro de devDependencies. O NPM tenta resolver um caminho UNC.mocha
atributo. Apenas ele pode adicionar mais de um e será usado pelo npm no final.Eu tenho uma ideia engraçada de hack.
Crie o nome do pacote npm adequadamente como divisor de comentários
dependencies
edevDependencies
bloqueie no package.json, por exemplox----x----x
NOTA : É necessário adicionar a última linha divisória do comentário com a versão válida, como
*
no bloco.fonte
npm install
(usando o npm 5) minhas chaves duplicadas foram removidas automaticamente :(Inspirado por esta discussão, aqui está o que estamos usando :
fonte
Até agora, a maioria dos "hacks" aqui sugerem abusar do JSON. Mas, em vez disso, por que não abusar da linguagem de script subjacente?
Editar A resposta inicial foi colocar a descrição à direita usando
# add comments here
para envolvê-la; no entanto, isso não funciona no Windows, porque os sinalizadores (por exemplo, npm run myframework - --myframework-flags) seriam ignorados. Alterei minha resposta para fazê-lo funcionar em todas as plataformas e adicionei alguns recuos para fins de legibilidade.Isso vai:
npm run myframework -- --help
npm run
(que é o comando real a ser executado para obter informações sobre os scripts disponíveis)package.json
(usandoless
ou seu IDE favorito)fonte
&&
vez de,;
para que o primeiro comando se torne:"help": "echo 'Display help information (this screen)' && npm run",
scripts
seçãopackage.json
Há muitas outras coisas.Aqui está minha opinião sobre os comentários em
package.json
/bower.json
:Eu tenho
package.json.js
que contém um script que exporta o realpackage.json
. A execução do script substitui o antigopackage.json
e me diz quais alterações foram feitas, perfeitas para ajudar você a acompanhar as alterações automáticasnpm
feitas. Dessa forma, eu posso definir programaticamente quais pacotes eu quero usar.A tarefa mais recente do grunhido está aqui: https://gist.github.com/MarZab/72fa6b85bc9e71de5991
fonte
npm install --save
ou--save-dev
?Acabei
scripts
assim:Minha intenção aqui não é esclarecer uma linha, apenas ter algum tipo de delimitador entre meus scripts para back-end, front-end, tudo etc.
Eu não sou um grande fã de 1a, 1b, 1c, 2a, ... mas as teclas são diferentes e eu não tenho nenhum problema assim.
fonte
Como essa resposta explica, a
//
chave foi reservada, para que possa ser usada convencionalmente para comentários. O problema com o//
comentário é que ele não pode ser usadodependencies
edevDependencies
como dependência regular com uma string como restrição de versão:desencadeia um erro,
Embora chaves com valores não-string sejam consideradas dependências inválidas e ignoradas com eficiência:
Uma dependência em si pode ser comentada da mesma maneira:
Como as dependências são classificadas quando o package.json é modificado pelo NPM, é impraticável colocar um comentário acima da dependência a que se refere:
A chave de comentário deve ser nomeada de acordo, se se referir a uma linha específica, para não ser movida:
Um comentário aplicável a dependência específica pode ser adicionado como parte do semver:
Observe que, se a primeira parte anterior
OR
não corresponder, um comentário pode ser analisado, por exemplo1.x
.Essas soluções alternativas são compatíveis com todas as versões atuais do NPM (6 e inferiores).
fonte
Como a maioria dos desenvolvedores está familiarizada com a documentação baseada em tags / anotações, a convenção que comecei a usar é semelhante. Aqui está uma amostra:
Nota: Para os
dependencies
,devDependencies
seções, etc, as anotações de comentário não pode ser adicionado diretamente acima das dependências de pacotes individuais dentro do objeto de configuração uma veznpm
está esperando a chave para ser o nome de um pacote de npm. Daí a razão para o@comment dependencies
.Nota: Em certos contextos, como no objeto de scripts, alguns editores / IDEs podem reclamar da matriz. No contexto de scripts, o VS Code espera uma sequência para o valor - não uma matriz.
Gosto da maneira no estilo anotação / tag de adicionar comentários ao JSON porque o
@
símbolo se destaca das declarações normais.fonte
Para resumir todas essas respostas:
Adicione um único campo de nível superior chamado
//
que contém uma sequência de comentários. Isso funciona, mas é péssimo, porque você não pode colocar comentários perto do que eles estão comentando.Adicione vários campos de nível superior começando com
//
, por exemplo,//dependencies
que contém uma sequência de comentários. Isso é melhor, mas ainda permite que você faça comentários de nível superior. Você não pode comentar dependências individuais.Adicione
echo
comandos ao seuscripts
. Isso funciona, mas é péssimo porque você só pode usá-loscripts
.Essas soluções também não são muito legíveis. Eles acrescentam uma tonelada de ruído visual e os IDEs não os destacam como comentários.
Eu acho que a única solução razoável é gerar o
package.json
de outro arquivo. A maneira mais simples é escrever seu JSON como Javascript e usar o Node para gravá-lopackage.json
. Salve este arquivo comopackage.json.mjs
,chmod +x
e então você pode simplesmente executá-lo para gerar seu arquivopackage.json
.Ele usa a
//
chave para avisar as pessoas de editá-lo.\x40generated
é deliberado. Ele se transforma@generated
empackage.json
e significa que alguns sistemas de revisão de código entrará em colapso esse arquivo por padrão.É uma etapa extra no seu sistema de compilação, mas supera todos os outros hacks aqui.
fonte
Como as chaves de comentário duplicadas são removidas, executando as ferramentas package.json (npm, yarn, etc), passei a usar uma versão hash que permite uma melhor leitura como várias linhas e chaves como
que é 'válido' de acordo com o meu IDE como chave raiz, mas dentro
dependencies
dele reclama-se a expectativa de um valor de sequência.fonte
//
chave em todos os lugares, não é realmente um bom substituto para comentários, especialmente quando os comentários podem ter bom destaque de sintaxe com um editor etc.Outro truque. Eu criei um script para ler
package.json
como o contexto de um modelo de guidão.Código abaixo, caso alguém considere essa abordagem útil:
arquivo de modelo de guidão
package-json-comments.hbs
fonte
Para o npm package.json, foram encontradas 2 maneiras (depois de ler esta conversa):
Mas com a atualização ou reinstalação do pacote com "--save" ou "--save-dev, comente como" ^ 4.1.0! comentário "no local correspondente será excluído. E tudo isso quebrou a auditoria da NPM.
fonte
del-comment
eenvify-comment
?Minha opinião sobre a frustração de não haver comentários no JSON. Crio novos nós, nomeados para os nós a que eles se referem, mas prefixados com sublinhados. Isso é imperfeito, mas funcional.
fonte
start_comment
seria melhor, porque então ele vai pedir em ordem alfabética