node.jsでコマンドラインアプリケーション等を作って、コマンドを実行させる方法です。
CoffeeScriptを直接実行する場合はファイルの1行目にshebangを書くだけです。
(もちろんchmodして実行権限を与える必要があります)
#!/usr/bin/env coffee
しかし実際には開発段階でJavaScriptにコンパイルして、nodeで実行させるのが普通だと思います。
なのでshebangをnodeに変えてみます。
#!/usr/bin/env node
ここで問題になるのが「CoffeeScriptで#から始まる行はコンパイル時に消去される」ということです。
対処法その1: 逆クォート(backquote)を使う
まず、普通にコンパイルすると全体を関数として閉じ込めてcall(this)
する形になりますのでshebangが1行目になりません。
この対処の為にbareモードでコンパイルする必要があります。
例えばgulpを使っている場合は以下の様にします。
coffee({bare: true})
次に、shebangをそのまま残す方法です。
`#!/usr/bin/env node
最初に逆クォートを入れることでちゃんとコンパイルされます。
しかしエディタの環境によっては以降の行が全て文字列と認識されてシンタックスハイライトが上手く表示できない場合があります。とても気持ち悪いです。
`#!/usr/bin/env node`
上記のように逆クォートで囲むことで解決できますが、CoffeeLintを使っていると警告が出ます。
これも気持ち悪いです。
対処法その2:
実行するファイルがapp.coffee
をコンパイルしたapp.js
だとします。
このapp.js
を呼び出すファイルをjsで書くことで解決できます。
「coffee書きたいんだよ!jsなんて直接書きたくないんだよ!」という人もほんの2行だけなのでガマンしてください。
#!/usr/bin/env node
require('../js/app')
普通にshebangを書いて普通にrequireするだけです。パスは環境に応じて書き換えてください。
gulp等で自動でコンパイルされる環境の方は、間違ってもrun.coffee
を作って上書きしないように注意してください。