Tengo un archivo package.json simple y quiero agregar un comentario. ¿Hay alguna manera de hacer esto, o hay algún truco para que esto funcione?
{
"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 */
}
}
El comentario de ejemplo anterior no funciona ya que npm se rompe. También he intentado // comentarios de estilo.
package.json
archivos y hay unapackage.json
respuesta específica en la lista de correo de NodeJS.package.json
. Por favor comente sobre ese tema, tal vez podamos mostrar cuán útiles pueden ser los comentarios.Respuestas:
Esto ha sido recientemente discutido en la lista de correo Node.js .
Según Isaac Schlueter, quien creó npm:
Cuando utilice sus herramientas habituales (npm, hilo, etc.) se eliminarán varias teclas "//". Esto sobrevive:
Esto no sobrevivirá:
fuente
{ "//": "first", "//": "second"}
impide usarnpm version
y otras utilidades de línea de comandos que generalmente reparan JSON completo y descartan las claves duplicadas en el proceso.package.json
objeto. Por ejemplo,{ "dependencies": { "//": "comment?" }}
no es válido pero{ "//": "comment!", "dependencies":{}}
es válido."//"
clave y su valor se borran eventualmente. ¿Hay alguna manera de tener comentarios permanentes?Aquí hay otro truco para agregar comentarios en JSON. Ya que:
Es equivalente a
Puedes hacer algo como:
fuente
"express": "makes routing better so I don't want to gouge my eyes out", "express": "3.x"
. Entonces, sí, "qué asco" como dice ColinE, y también "gracias" como dice ColinE.package.json
programa de forma programática, por ejemplo,npm version 1.2.3
para cambiar la versión: las entradas redundantes se eliminarán del JSON resultante.Después de perder una hora en soluciones complejas y extravagantes, he encontrado una solución simple y válida para comentar mi sección de dependencias voluminosas en
package.json
. Solo así:Cuando se ordena de la misma manera, ahora es muy fácil para mí rastrear estos pares de dependencias / comentarios en git commit diffs o en el editor mientras trabajo
package.json
.Y no hay herramientas adicionales involucradas, solo JSON simple y válido.
Espero que esto ayude a cualquiera.
fuente
"scripts": { "postinstall": "echo postinstall stuff goes here", "help-postinstall": "echo helpful stuff goes here" }
Muchas ideas interesantes
Lo que he estado haciendo es esto:
De esta manera, puedo leer los "pseudo-comentarios" en el script mismo, Y también ejecutar algo como lo siguiente, para ver algún tipo de ayuda en la terminal:
Mis 2 centavos para esta discusión :)
fuente
NPS (Node Package Scripts) resolvió este problema por mí. Le permite colocar sus scripts NPM en un archivo JS separado, donde puede agregar comentarios en abundancia y cualquier otra lógica JS que necesite. https://www.npmjs.com/package/nps
Muestra de
package-scripts.js
uno de mis proyectosAcabo de hacer una instalación local
npm install nps -save-dev
y puse esto en mispackage.json
scripts.fuente
Siempre puede abusar del hecho de que las claves duplicadas se sobrescriben. Esto es lo que acabo de escribir:
Sin embargo, no está claro si JSON permite claves duplicadas (consulte ¿La sintaxis JSON permite claves duplicadas en un objeto? Parece que funciona con npm, así que me arriesgo.
El truco recomendado es usar
"//"
claves (de la lista de correo de nodejs ). Sin embargo, cuando lo probé, no funcionó con las secciones de "dependencias". Además, el ejemplo en la publicación usa múltiples"//"
claves, lo que implica que npm no rechaza los archivos JSON con claves duplicadas. En otras palabras, el truco anterior siempre debe estar bien.Actualización: Una desventaja molesta del pirateo de claves duplicadas es que
npm install --save
elimina silenciosamente todos los duplicados. Desafortunadamente, es muy fácil pasarlo por alto y sus comentarios bien intencionados se han ido.El
"//"
truco sigue siendo el más seguro como parece. Sin embargo, los comentarios de varias líneas también se eliminaránnpm install --save
.fuente
"//"
hack no funciona dentro de devDependencies. NPM intenta resolver una ruta UNC.mocha
atributo. Solo puede agregar más de uno y será utilizado por npm al final.Tengo una idea divertida para hackear.
Cree el nombre del paquete npm adecuadamente como divisor de comentarios para
dependencies
ydevDependencies
bloquee en package.json, por ejemplox----x----x
NOTA : Debe agregar la última línea divisoria de comentarios con una versión válida como
*
en el bloque.fuente
npm install
(usando npm 5) mis claves duplicadas se eliminaron automáticamente :(Inspirado en este hilo, esto es lo que estamos usando :
fuente
Hasta ahora, la mayoría de los "hacks" aquí sugieren abusar de JSON. Pero en cambio, ¿por qué no abusar del lenguaje de scripting subyacente?
Editar La respuesta inicial fue poner la descripción a la derecha usando
# add comments here
para envolverla; sin embargo, esto no funciona en Windows, porque las banderas (por ejemplo, npm ejecutan myframework - --myframework-flags) serían ignoradas. Cambié mi respuesta para que funcione en todas las plataformas, y agregué algunas sangrías para propósitos de legibilidad.Esta voluntad:
npm run myframework -- --help
npm run
(que es el comando real para ejecutar y obtener información sobre los scripts disponibles)package.json
(usandoless
o su IDE favorito)fuente
&&
lugar de;
hacerlo, el primer comando se convierte en:"help": "echo 'Display help information (this screen)' && npm run",
scripts
sección.package.json
Es muchas otras cosas.Esta es mi opinión sobre los comentarios dentro de
package.json
/bower.json
:Tengo
package.json.js
que contiene un script que exporta el realpackage.json
. Ejecutar el script sobrescribe el antiguopackage.json
y me dice qué cambios realizó, perfecto para ayudarlo a realizar un seguimiento de los cambios automáticosnpm
realizados. De esa manera, incluso puedo definir programáticamente qué paquetes quiero usar.La última tarea gruñona está aquí: https://gist.github.com/MarZab/72fa6b85bc9e71de5991
fuente
npm install --save
o--save-dev
?Terminé con algo
scripts
así:Mi intención aquí no es aclarar una línea, solo tener algún tipo de delimitador entre mis scripts para backend, frontend, todos, etc.
No soy un gran fanático de 1a, 1b, 1c, 2a, ... pero las teclas son diferentes y no tengo ningún problema en absoluto.
fuente
Como explica esta respuesta , la
//
clave estaba reservada, por lo que puede usarse convencionalmente para comentarios. El problema con el//
comentario es que no se puede utilizar endependencies
ydevDependencies
como la dependencia regular con una cadena como la versión restricción:desencadena un error,
Aunque las claves con valores que no son cadenas se consideran dependencias no válidas y se ignoran de manera eficiente:
Una dependencia en sí misma puede comentarse de la misma manera:
Dado que las dependencias se ordenan cuando NPM modifica package.json, no es práctico colocar un comentario sobre una dependencia a la que hace referencia:
La clave de comentario debe nombrarse en consecuencia si se refiere a una línea específica, por lo que no se moverá:
Se puede agregar un comentario que sea aplicable a dependencias específicas como parte de semver:
Tenga en cuenta que si la primera parte anterior
OR
no coincide, se puede analizar un comentario, por ejemplo1.x
.Estas soluciones son compatibles con todas las versiones actuales de NPM (6 y anteriores).
fuente
Como la mayoría de los desarrolladores están familiarizados con la documentación basada en etiquetas / anotaciones, la convención que comencé a usar es similar. Aquí hay una muestra:
Nota: Para las
dependencies
,devDependencies
secciones, etc, las anotaciones de comentarios no se puede añadir directamente encima de las dependencias de los paquetes individuales dentro del objeto de configuración yanpm
está esperando la clave para ser el nombre de un paquete de NPM. De ahí la razón de la@comment dependencies
.Nota: En ciertos contextos, como en el objeto de secuencias de comandos, algunos editores / IDEs pueden quejarse de la matriz. En el contexto de los scripts, VS Code espera una cadena para el valor, no una matriz.
Me gusta la forma de anotación / estilo de etiqueta de agregar comentarios a JSON porque el
@
símbolo se destaca de las declaraciones normales.fuente
Para resumir todas estas respuestas:
Agregue un solo campo de nivel superior llamado
//
que contiene una cadena de comentarios. Esto funciona pero apesta porque no puedes poner comentarios cerca de lo que comentan.Agregue múltiples campos de nivel superior comenzando
//
, por ejemplo,//dependencies
que contiene una cadena de comentarios. Esto es mejor, pero solo te permite hacer comentarios de alto nivel. No puedes comentar dependencias individuales.Agrega
echo
comandos a tuscripts
. Esto funciona pero apesta porque solo puedes usarloscripts
.Estas soluciones tampoco son todas muy legibles. Agregan una tonelada de ruido visual y los IDE no sintaxis los resaltan como comentarios.
Creo que la única solución razonable es generar el
package.json
archivo desde otro archivo. La forma más simple es escribir su JSON como Javascript y usar Node para escribirlopackage.json
. Guarde este archivo comopackage.json.mjs
,chmod +x
y luego puede ejecutarlo para generar supackage.json
.Utiliza la
//
clave para advertir a las personas que no lo editen.\x40generated
es deliberado Se convierte@generated
enpackage.json
y significa que algunos sistemas de revisión de código colapsarán ese archivo de manera predeterminada.Es un paso adicional en su sistema de compilación, pero supera a todos los otros hacks aquí.
fuente
A medida que se eliminan las claves de comentario duplicadas ejecutando las herramientas package.json (npm, yarn, etc.) llegué a usar una versión hash que permite una mejor lectura como múltiples líneas y claves como
que es 'válido' según mi IDE como clave raíz, pero dentro de
dependencies
él se queja esperando un valor de cadena.fuente
//
clave de todo el mundo, en realidad no es un buen sustituto de los comentarios, especialmente cuando los comentarios pueden tener buen resaltado de sintaxis con un editor etcOtro truco. Creé un script para leer
package.json
como contexto para una plantilla de manillar.Código a continuación en caso de que alguien encuentre útil este enfoque:
archivo de plantilla de manillar
package-json-comments.hbs
fuente
Para npm package.json hemos encontrado 2 formas (después de leer esta conversación):
Pero con la actualización o reinstalación del paquete con "--save" o "--save-dev, comente como" ^ 4.1.0! comentario "en el lugar correspondiente se eliminará. Y todo esto romperá la auditoría npm.
fuente
del-comment
yenvify-comment
?Mi opinión sobre la frustración de no hacer comentarios en JSON. Creo nuevos nodos, nombrados por los nodos a los que se refieren, pero con prefijo de guiones bajos. Esto es imperfecto, pero funcional.
fuente
start_comment
sería mejor, porque entonces se ordenará alfabéticamente