Problemas de argumentos de entrada de JavaScript en la línea de comandos al minimizar JavaScript en Gedit

StackOverflow https://stackoverflow.com/questions/1428428

Pregunta

Quiero minificar mis archivos JavaScript inmediatamente en Gedit. Intenté hacerlo a través de la opción de herramientas externas con jsmin.js script. Tengo instalado el motor SpiderMonkey. Almacené el archivo jsmin.js en /home/mushex/use/js/jsmin.js y creé un nuevo archivo js llamado jsmin-low.js en el mismo directorio con contenido

#!/usr/bin/js 

load('/home/mushex/use/js/jsmin.js');

var body = arguments[0],
    result = jsmin('', body, 1);
if (result) {
    print(result);
} else {
    print(body);
}

Imprime indefinido. Para la depuración, he cambiado el script para que se realice solo en la acción de impresión de argumentos, y vi que la entrada es nula (indefinida). La fuente del archivo para la depuración fue

#!/usr/bin/js 
print(arguments[0]);

Pero cuando lo estoy ejecutando en la línea de comandos, su salida es correcta. Y a través de gedit, otras herramientas de línea de comandos de js funcionan normalmente. Vagando por qué mis argumentos de entrada no pasan.

Estas son las configuraciones que configuré para esta herramienta en gedit.

Configuración http://imagebin.org/index.php?mode=image& id = 63960

Cualquier ayuda será muy apreciada Gracias.

¿Fue útil?

Solución

El problema es que gedit está enviando el documento a la entrada estándar de su programa, no como un argumento de línea de comandos. El shell SpiderMonkey tiene una función readline () que lee una línea desde stdin, pero no tiene una forma de saber cuándo llega a EOF.

Si compila SpiderMonkey con soporte File , probablemente podría hacerlo, pero nunca lo he intentado.

Si usa el Rhino shell , puede usar las clases de Java directamente así:

function readStdin() {
    var stdin = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.System["in"]));
    var lines = [];
    var line;
    while ((line = stdin.readLine()) !== null) {
        lines.push(line);
    }
    return lines.join("\n");
}

var body = readStdin();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top