JavaScript can run virtually anywhere, including as a windows exe and the windows command line.
Say you have a JavaScript function foo()
function foo(input) { var output = input; // .. unicorns return output; }
In order to make this a windows shell script you add at the and a way to read standard input and then write to the standard output:
(function () { var input = WScript.StdIn.ReadAll(), output = foo(input); WScript.StdOut.Write(output); }());
Then you run this script, say foo.js
, like:
$ cscript foo.js < input.txt
And it prints the output to the console.
If you want to read and print the code of foo.js itself you go:
$ cscript foo.js < foo.js Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation. All rights reserved. function foo(input) { var output = input; ...
You can remove this "Microsoft (R) Windows..." stuff with //NoLogo
parameter:
$ cscript //NoLogo foo.js < foo.js function foo(input) { var output = input; ...
CSSMin.JS
Alrighty, going back to the title of the post.
CSSMin.js is a port of YUICompressor's CSS minifier (source, hosted tool). Now adding a few lines at the end makes a windows shell script:
(function () { var src = WScript.StdIn.ReadAll(); if (!src) { // help! WScript.StdOut.WriteLine("cscript //NoLogo cssmin.js < in.css > out.css"); return; } WScript.StdOut.Write(YAHOO.compressor.cssmin(src)); }());
Use it like:
$ cscript //NoLogo cssmin.js < in.css > out.css
Don't forget the //NoLogo or you'll end up with "Microsoft..." in your minified files
Random observation: "dude"[0] === "d"
in most JS environments but is undefined
in WSH (Windows Scripting Host). So "dude".substring(0, 1)