StrongLoopをインスコしてみた

http://strongloop.com/
Node.jsの企業向けディストリビューションという、StrongLoopをインスコしてみました。がっちり電話や住所も含むユーザー登録を行った後に、ダウンロードサイトにて各OS版のディストロを選択します。tarボールとインストーラ付きの両方がありました。
f:id:masataka_k:20130925100141p:plain
MacOS向けインストーラで進めると、PCワイドに /usr/local/ にインストールされます。普通のNode.jsと同じように、/usr/local/binに各コマンドへのリンクがおかれました。指している先は、/usr/local/lib/node_modules/*/bin で、StrongLoop特有なものは、slcというツールがあります。このツールの実体は小さなJavaScriptを含むシェルスクリプトで以下のとおり。

(/usr/local/lib/node_modules/slc/bin/slc)
#!/usr/bin/env node
require('../lib/loader')
  .createLoader({
    fallback: 'run',
    manuals: require('path').resolve(__dirname, '..', 'man')
  })
  .on('error', function (err) {
    console.error(err.message);
    process.exit(1);
  })
  .run();

要はrequire('loader.js').run()だということで、続けてrequireしているloader.jsを見ると...やってることは分かるけど、なんでこんなことをしているのかが分からん...ということでヘルプ。

$ nlc -h

//(省略)
Note that the second and third command forms are short forms of the npm
and run commands described below. An unrecognized slc command that is
an npm command will be passed to npm, any other unrecognized command
will be passed to the run command.
//(省略)

うーん、npmと独自コマンド集とのランチャーということですね。ではそのコマンドとは...

//(省略)
npm: run a npm command
run: run a node script
env: print node environment information
version: print node version
help: print usage information for a command
debug: debug a script
create: create node script boilerplate
lb: create LoopBack workspaces, applications, and models
example: create example applications
//(省略)

やはりcreateでしょうかね、ここの価値は。ターミナルで、slc createとだけすると、さらに詳細なMANが出てきました。web、package、module、cliとタイプを選びつつ、タイプ毎にオプションがそれぞれあります。webだとどうやらmongoose推しです。ほかのDB選択肢はありません。

$ slc create web my1stSL -m

実行するとファイル作って、npmかけはじめます。express、ejs、passport、q、asyncそしてmongooseといったもの入れつつstrongloop.comからたくさん導入しています。expressスタイルのapp.jsを作るのでこれを見てみると...

//(app.js)
require('strong-agent').profile();

/**
 * If configured as a cluster master, just start controller.
 */

var control = require('strong-cluster-control');
var options = control.loadOptions();

if(options.clustered && options.isMaster) {
  return control.start(options);
}
//(省略)

おおー、strong-clusterデフォだよ。標準のものと何が違うのか楽しみ。ということでなんか面白いな。でも、真価を探るのにはかなり時間かかりそう。