¿Cómo puedo embellecer el código JavaScript usando la Línea de comandos?


Estoy escribiendo un script por lotes para embellecer el código JavaScript. Necesita funcionar tanto en Windows como en Linux .

¿Cómo puedo embellecer el código JavaScript usando las herramientas de línea de comandos?

Author: Bhargav Rao, 2008-08-21

8 answers

Primero, elige tu favorito basado en Javascript Pretty Print / Beautifier. Prefiero el de http://jsbeautifier.org / , porque es lo que encontré primero. Descarga su archivo https://github.com/beautify-web/js-beautify/blob/master/js/lib/beautify.js

En segundo lugar, descargue e instale el motor Javascript basado en Java del grupo Mozilla, Rhino. "Instalar"es un poco engañoso; Descargar el archivo zip, extraer todo, colocar js.jar en tu Java classpath (o Library/Java/Extensions en OS X). A continuación, puede ejecutar scripts con una invocación similar a esta

java -cp js.jar org.mozilla.javascript.tools.shell.Main name-of-script.js

Use el Pretty Print/Beautifier del paso 1 para escribir un pequeño script de shell que leerá en su archivo javascript y lo ejecutará a través del Pretty Print/Beautifier del paso uno. Por ejemplo

//original code    
(function() { ... js_beautify code ... }());

//new code
print(global.js_beautify(readFile(arguments[0])));

Rhino proporciona a javascript algunas funciones útiles adicionales que no necesariamente tienen sentido en un contexto de navegador, pero sí en un contexto de consola. La función print hace lo que esperarías, e imprime una cuerda. La función readFile acepta una cadena de ruta de archivo como argumento y devuelve el contenido de ese archivo.

Invocarías lo anterior algo como

java -cp js.jar org.mozilla.javascript.tools.shell.Main beautify.js file-to-pp.js

Puede mezclar y combinar Java y Javascript en sus scripts de ejecución de Rhino, por lo que si conoce un poco de Java, no debería ser demasiado difícil hacerlo funcionar también con flujos de texto.

 59
Author: Alan Storm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-16 00:57:58

Si estás usando nodejs entonces intenta uglify-js

En Ubuntu 12.04, suponiendo que ya tiene instalado nodejs, puede instalar uglify con:

sudo npm install -g uglify-js

Y luego obtener las opciones:

uglifyjs -h

Así que si tengo un archivo fuente foo.js que se parece a esto:

// foo.js -- minified
function foo(bar,baz){console.log("something something");return true;}

Puedo embellecerlo así: {[13]]}

uglifyjs foo.js --beautify --output cutefoo.js

uglify usa espacios para sangría de forma predeterminada, así que si quiero convierta la sangría de 4 espacios en pestañas que puedo ejecutar a través de unexpand que viene con Ubuntu 12.04:

unexpand --tabs=4 cutefoo.js > cuterfoo.js

O puedes hacerlo todo de una sola vez:

uglifyjs foo.js --beautify | unexpand --tabs=4 > cutestfoo.js

Puede encontrar más información sobre unexpand aquí

Así que después de todo esto termino con un archivo que se ve así:

function foo(bar, baz) {
    console.log("something something");
    return true;
}

Actualización 2016-06-07

Parece que el mantenedor de uglify-js ahora está trabajando en la versión 2 aunque la instalación es la misma.

 23
Author: erapert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:59

ACTUALIZACIÓN DE Abril 2014:

El embellecedor ha sido reescrito desde que respondí esto en 2010. Ahora hay un módulo python ahí, un paquete npm para nodejs, y el archivo jar se ha ido. Por favor, lea la página del proyecto en github.com .

Estilo Python:

 $ pip install jsbeautifier

Estilo NPM:

 $ npm -g install js-beautify

Para usarlo:

 $ js-beautify file.js

Respuesta original

Añadiendo a la respuesta de @Alan Storm

El embellecedor de la línea de comandos basado en http://jsbeautifier.org / se ha vuelto un poco más fácil de usar, porque ahora se basa (alternativamente) en el motor javascript V8 (código c++) en lugar de rhino (motor JS basado en java, empaquetado como "js.frasco"). Por lo tanto, puede usar V8 en lugar de Rhino.

Cómo usar:

Descargar jsbeautifier.org archivo zip desde http://github.com/einars/js-beautify/zipball/master

(esta es una URL de descarga vinculada a un archivo zip como http://download.github.com/einars-js-beautify-10384df.zip )

Viejo (ya no funciona, el archivo jar se ha ido)

  java -jar js.jar  name-of-script.js

Nuevo (alternativo)

Instale/compile v8 lib DESDE svn, vea v8/README.txt en el archivo zip antes mencionado

  ./jsbeautify somefile.js

- tiene opciones de línea de comandos ligeramente diferentes a las de la versión de rhino,

- y funciona muy bien en Eclipse cuando se configura como una"Herramienta externa"

 15
Author: knb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-28 17:48:37

No soy capaz de añadir un comentario a la respuesta aceptada por lo que es por eso que ves un post que no debería haber existido en primer lugar.

Básicamente también necesitaba un embellecedor de javascript en un código java y para mi sorpresa ninguno está disponible por lo que pude encontrar. Así que codifiqué uno yo mismo enteramente basado en la respuesta aceptada (envuelve el jsbeautifier.org más bonito .js, pero se puede llamar desde Java o la línea de comandos).

El código se encuentra en https://github.com/belgampaul/JsBeautifier

Usé rhino y beautifier.js

USO desde la consola: java-jar jsbeautifier.jar script indentation

Ejemplo: java-jar jsbeautifier.jar "function ff () {return;}" 2

USO del código java: cadena estática pública jsBeautify (Cadena jsCode, int indentSize)

Puede ampliar el código. En mi caso solo necesitaba la sangría para poder comprobar el javascript generado mientras desarrollar.

Con la esperanza de que te ahorre algo de tiempo en tu proyecto.

 1
Author: ioikka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-28 17:46:09

He escrito un artículo explicando cómo construir un embellecedor de JavaScript de línea de comandos implementado en JavaScript en menos de 5 minutos. YMMV.

  1. Descargue la última versión estable de Rhino y descomprímala en algún lugar, por ejemplo, ~/dev/javascript/rhino
  2. Descargar embellecer.js a la que se hace referencia a partir de lo anterior jsbeautifier.org luego cópialo en alguna parte, por ejemplo ~ / dev/javascript/bin / cli-beautifier.js
  3. Añadir esto al final de embellecer.js (utilizando algunos propiedades de nivel superior a JavaScript):

    // Run the beautifier on the file passed as the first argument.
    print( j23s_beautify( readFile( arguments[0] )));
    
  4. Copie y pegue el siguiente código en un archivo ejecutable, por ejemplo ~/dev/javascript/bin/jsbeautifier.sh:

    #!/bin/sh
    java -cp ~/dev/javascript/rhino/js.jar org.mozilla.javascript.tools.shell.Main ~/dev/web/javascript/bin/cli-beautifier.js $*
    
  5. (opcional) Añadir la carpeta con jsbeautifier.js para PATH o mover a alguna carpeta que ya está allí.

 0
Author: Shonzilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-01 23:55:46

Creo que cuando se le preguntó acerca de la herramienta de línea de comandos que solo quería embellecer todos sus archivos js en lote.

En este caso Intellij IDEA (probado con 11.5) puede hacer esto.

Solo tiene que seleccionar cualquiera de sus archivos de proyecto y seleccionar "Código"->"Reformatear código.."en el menú principal del IDE. A continuación, en el cuadro de diálogo seleccione "todos los archivos en el directorio ..."y pulse "enter". Solo asegúrate de dedicar suficiente memoria para la JVM.

 0
Author: gumkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-20 19:20:10

Use la forma moderna de JavaScript:

Use Grunt en combinación con el complemento jsbeautifier para Grunt

Puede instalar todo fácilmente en su entorno de desarrollo usando npm.

Todo lo que necesita es configurar un archivo Gruntfile.js con las tareas apropiadas, que también pueden involucrar la concatenación de archivos, pelusa, uglify, minify, etc., y ejecutar el comando grunt.

 0
Author: Tchakabam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-15 19:49:10

En la consola, puede usar Estilo artístico (también conocido como AStyle) con --mode=java.
Funciona muy bien y es gratuito, de código abierto y multiplataforma (Linux, Mac OS X, Windows).

 0
Author: tmaric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-29 13:18:01