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?
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?
Respuestas:
Primero, elija su Pretty Print / Beautifier basado en Javascript favorito. Yo prefiero el dehttp://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 Rhino , el motor de JavaScript basado en Java del grupo Mozilla . "Instalar" es un poco engañoso; Descargue el archivo zip, extraiga todo, coloque js.jar en su classpath de Java (o Library / Java / Extensions en OS X). Luego puede ejecutar scripts con una invocación similar a esta
java -cp js.jar org.mozilla.javascript.tools.shell.Main name-of-script.js
Utilice Pretty Print / Beautifier del paso 1 para escribir un pequeño script de shell que se leerá en su archivo javascript y lo ejecutará a través de Pretty Print / Beautifier desde el 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 el contexto del navegador, pero sí en el contexto de una consola. La función print hace lo que esperarías e imprime una cadena. 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.
ACTUALIZACIÓN Abril de 2014 :
El embellecedor se ha reescrito desde que respondí esto en 2010. Ahora hay un módulo de Python allí, un paquete npm para nodejs y el archivo jar se ha ido. 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
Agregando a la respuesta de @Alan Storm
el embellecedor de línea de comando basado en http://jsbeautifier.org/ se ha vuelto un poco más fácil de usar, porque ahora (alternativamente) está basado en el motor javascript V8 (código c ++) en lugar de rhino (motor JS basado en java, empaquetado como "js.jar"). Entonces puedes usar V8 en lugar de rhino.
Cómo utilizar:
descargue el archivo zip jsbeautifier.org de 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 )
antiguo (ya no funciona, el archivo jar se ha ido)
java -jar js.jar name-of-script.js
nuevo (alternativo)
instalar / compilar v8 lib DESDE svn, ver v8 / README.txt en el archivo zip mencionado anteriormente
./jsbeautify somefile.js
-tiene opciones de línea de comando ligeramente diferentes a las de la versión de rhino,
-y funciona muy bien en Eclipse cuando se configura como una "herramienta externa"
Si está usando nodejs, intente uglify-js
En Linux o Mac, asumiendo que ya tiene nodejs instalado, puede instalar uglify con:
sudo npm install -g uglify-js
Y luego obtén las opciones:
uglifyjs -h
Entonces, 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í:
uglifyjs foo.js --beautify --output cutefoo.js
uglify
usa espacios para la sangría de forma predeterminada, por lo que si quiero convertir la sangría de 4 espacios en pestañas, puedo ejecutarla a través de la unexpand
cual viene Ubuntu 12.04:
unexpand --tabs=4 cutefoo.js > cuterfoo.js
O puede hacerlo todo de una vez:
uglifyjs foo.js --beautify | unexpand --tabs=4 > cutestfoo.js
Puede encontrar más información sobre inexpand 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 responsable de mantenimiento de uglify-js ahora está trabajando en la versión 2, aunque la instalación es la misma.
uglifyjs -b
Hace mucho más que corregir la sangría, reorganiza y reescribe el código, quizás por eficiencia. Eso no es lo que quería. Estaba usando una versión anterior, en Ubuntu 14.04.
uglifyjs -b
reorganiza y reescribe el código?
$ sudo apt install jsbeautifier
$ js-beautify ugly.js > beautiful.js
js-beautify -o file.js file.js
En la consola, puede usar Artistic Style (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).
Utilice 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 necesitará es configurar un Gruntfile.js con las tareas apropiadas, que también pueden involucrar la concatenación de archivos, lint, uglify, minify, etc., y ejecutar el comando grunt.
No puedo agregar un comentario a la respuesta aceptada, por eso ves una publicación que no debería haber existido en primer lugar.
Básicamente, también necesitaba un embellecedor de javascript en un código de Java y, para mi sorpresa, ninguno está disponible hasta donde pude encontrar. Así que codifiqué uno yo mismo en función de la respuesta aceptada (envuelve el script jsbeautifier.org beautifier .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: sangría de script java -jar jsbeautifier.jar
ejemplo: java -jar jsbeautifier.jar "function ff () {return;}" 2
USO del código java: público estático String jsBeautify (String jsCode, int indentSize)
Le invitamos a ampliar el código. En mi caso, solo necesitaba la sangría para poder verificar el javascript generado mientras desarrollaba.
Con la esperanza de que le ahorre algo de tiempo en su proyecto.
Escribí un artículo que explica cómo crear un embellecedor de JavaScript de línea de comandos implementado en JavaScript en menos de 5 minutos. YMMV.
- Descargue el Rhino estable más reciente y descomprímalo en algún lugar, por ejemplo, ~ / dev / javascript / rhino
- Descargue beautify.js al que se hace referencia en jsbeautifier.org antes mencionado y luego cópielo en algún lugar, por ejemplo, ~ / dev / javascript / bin / cli-beautifier.js
Agregue esto al final de beautify.js (usando algunas propiedades adicionales de nivel superior para JavaScript):
// Run the beautifier on the file passed as the first argument. print( j23s_beautify( readFile( arguments[0] )));
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 $*
(opcional) Agregue la carpeta con jsbeautifier.js a PATH o muévala a alguna carpeta que ya esté allí.
Creo que cuando preguntaste sobre la herramienta de línea de comandos, solo querías embellecer todos tus archivos js por lotes.
En este caso, Intellij IDEA (probado con 11.5) puede hacer esto.
Solo necesita seleccionar cualquiera de los archivos de su proyecto y seleccionar "Código" -> "Reformatear código ..." en el menú principal del IDE. Luego, en el cuadro de diálogo, seleccione "todos los archivos del directorio ..." y presione "enter". Solo asegúrese de dedicar suficiente memoria para la JVM.
Tiene algunas opciones de un forro. Úselo con npm o de forma independiente con npx .
npx semistandard "js/**/*.js" --fix
npx standard "js/**/*.js" --fix
npx prettier --single-quote --write --trailing-comma all "js/**/*.js"