CSSWringで標準入力を読めるように

先週末の某カンファレンスの方面から無言の圧力を感じたので、CSSWringのCLIプログラムをパイプで繋げられるようにした。入力ファイルが省略されたら……で実装しようとしていたが、オプションの組み合わせの分岐がややこしい。面倒そうだったので入力ファイルとして指定した文字列が-だった場合に……で実装した。

利用方法は今まで入力ファイル名を指定した部分を-に差し替えるだけで良い。特に今までの使い方を阻害することもないと思う。

$ cat input.css | csswring -
$ csswring - <input.css

もちろんこのどちらでも大丈夫になっている。この場合は出力ファイルを省略しているので標準出力へ処理結果が吐かれる。

$ cat input.css | csswring - out.css

標準入力を読みつつ、出力ファイルを指定することもできる。この場合はout.cssに処理結果が吐かれる。

$ cat input.css | csswring --sourcemap -
$ cat input.css | csswring --sourcemap - out.css

Source Mapsも問題なく出力される。前者ではインラインでData URI化されて埋め込まれ、後者ではout.css.mapに吐かれる。


実装では標準入力を同期的に読もうかとも考えたが、同期に固執するほどではないのでNode.js界隈のCLIプログラム達でメジャーなprocess.openStdin()を使って実装した。process.openStdin()はドキュメントに載っていない気がする。ここが非同期になった関係で出力部分に少し手を入れることになったが、概ねそのままで済んだので新たにバグは入っていないと思う。

ここらへんまで面倒を見てくれるNode.jsパッケージなどもいくつかあるようだ。しかしインタラクティブな入力を処理する必要もないプログラムなので、この程度のもので良いだろう。


PostCSS v3のパーサーのバグの修正を待って、まとめてリリースする予定だ。そのうち気が向いたら出力の方も善処する。