gist

2012年2月4日土曜日

[Node.js] Cloud9 IDEを拡張してnpmのインストーラを作ってみる

Cloud9 IDEには、NideのようなNPM Managerがありません。expressをインストールするには、コマンドラインを使う必要があります。IDEからnpmインストールできるといいですよね。

ローカル環境にインストールしたCloud9 IDEを拡張してみます。

ポイント

  • npmコマンドは結局サーバ側のコマンドなので、クライアントとサーバの両方を拡張する必要がある。
  • gittoolsが参考になる。

全体の流れ

  1. クライアント側からide.send(message)を使ってJSONでコマンド送信。サーバー側のthis.command(user, message, client)で受信。
  2. サーバ側でspawnCommandでコマンド実行。コールバック内でsendResultでストリーム出力をクライアントへ送信。
  3. クライアント側のonMessageで出力を受信。クライアントinit内でideのsocketMessageイベントとバインドしておく。

とりあえずで出来上がったのが、これ。

有効化するとEditからNPM Managerを選択できます。

ダイアログが開いて、パッケージ名を入力。

コンソールにNPMがインストール結果が表示されます。

もう少し理解を深めたらgithubに公開しようと思います。今回は一部だけ。サーバ側のコマンドの実装です。

 this.command = function(user, message, client) {
        if (message.command != "npmtools")
            return false;

        var _self = this;
        var subcommand = message.subcommand;
        if(subcommand !== "install") return false;
        
        var packagename = message.packagename;
        var argv = [subcommand, packagename];
        var npmRoot = ".";

        this.spawnCommand("npm", argv, npmRoot,
            function(err) { // Error
                _self.sendResult(0, message.command, {
                    code: 0,
                    err: err,
                    out: null
                });
            },
            function(out) { }, // Data
            function(code, err, out) { // Exit
                _self.sendResult(0, message.command, {
                    code: code,
                    err: null,
                    out: out
                });
            }
        );

        return true;
    };

あとは、コマンドラインからnpm打てるようにするのと、画面からパッケージの一覧、アンインストールできるようにしたいと思います。

0 件のコメント: