コマンドとしてもライブラリとしても動くnode.jsスクリプト
Perlではモジュールとコマンドの拡張子が違うのであまりやりませんが、node.jsスクリプトだとたまに必要になるので備忘録として。
process.argv[1]がnode(1)に渡されたスクリプト名、__filenameがスクリプトファイルの名前なので、これが一致したときはメイン関数を呼ぶだけですね。
#!/usr/bin/env node "use strict"; function hello() { console.log("Hello, world!"); } if(process.argv[1] === __filename) { hello(); } else { module.exports = hello; }
$ node hello.js Hello, world! $ node -e 'var hello = require("./hello"); hello()' Hello, world!