Problèmes d'arguments d'entrée de ligne de commande JavaScript lors de la réduction de JavaScript dans Gedit

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

Question

Je veux minifier mes fichiers JavaScript immédiatement dans Gedit. J'ai essayé de le faire via l'option des outils externes avec le script jsmin.js . J'ai le moteur SpiderMonkey installé. J'ai stocké le fichier jsmin.js dans /home/mushex/use/js/jsmin.js et créé un nouveau fichier js nommé jsmin-low.js dans le même répertoire avec le contenu

#!/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);
}

Cela imprime non défini. Pour le débogage, j'ai modifié le script pour qu'il n'effectue que l'action d'impression d'arguments, et j'ai constaté que l'entrée est nulle (non définie). La source du fichier de débogage était

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

Mais lorsque je l'exécute en ligne de commande, la sortie est correcte. Et via gedit, d’autres outils en ligne de commande js fonctionnent normalement. Je me demande pourquoi mes arguments d'entrée ne passent pas.

Voici les paramètres que j'ai définis pour cet outil dans gedit.

Paramètres http://imagebin.org/index.php?mode=image& id = 63960

Toute aide sera grandement appréciée Merci.

Était-ce utile?

La solution

Le problème est que gedit envoie le document dans l'entrée standard de votre programme, et non comme un argument de ligne de commande. Le shell SpiderMonkey a une fonction readline () qui lit une ligne à partir de stdin, mais n’a aucun moyen de savoir quand vous atteignez EOF.

Si vous compilez SpiderMonkey avec le support de Fichier , vous pouvez probablement le faire, mais je n'ai jamais essayé.

Si vous utilisez le shell Rhino , vous pouvez utiliser les classes Java directement comme ceci:

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top