12月 042013
Sinatra::RocketIOのNode.js用クライアントを作った、という事を書くのを忘れていた。
自作Nodeモジュールをnpmjs.orgへ登録する方法もまとめる。
https://github.com/shokai/node-rocketio-client
https://npmjs.org/package/rocketio-client
感想
npmに初めて登録したけど、rubygems.orgの良い所はそのままにより洗練されてる感じがした。あとcoffee-script、昔触った時は何これすっげえキモイと思って無理だったんだけど、その頃よりも構文が充実してたし、
Scalaを少し勉強したお陰で目が慣れてて普通に書けるようになってた。
Rubyとscala書ける人はcoffee-scriptすんなり入れると思う。
インストール
npm install rocketio-client
使う
ごく普通にSinatra::RocketIOに接続できる。websocketとcometの使える方が選択される。
RocketIO = require 'rocketio-client'
io = new RocketIO('http://localhost:5000').connect()
io.on 'connect', (io)->
console.log "connect!! (#{io.type})"
io.push 'hello', 'hello world'
io.on 'echo', (data)->
console.log "echo> #{data}"
サーバー側はこんな感じ
main.rb
io = Sinatra::RocketIO
## receive "hello" from client
io.on :hello do |message, client|
puts "> receive '#{message}' from #{client.session} (#{client.type} #{client.address})"
## push "echo" to client
io.push :echo, message
end
自作nodeモジュールをnpmjs.orgに登録する方法
package.jsonを作る
% npm init対話形式でライブラリの名前やauthor、ライセンス形態を質問されるので答えるとpackage.jsonが生成される。
package.jsonを直接編集して、必要あれば項目を追加する。
- “dependencies” に実行時の依存ライブラリを書く
- “devDependencies” に開発時に必要なライブラリを書く
- 実行可能コマンドも配布する場合、 “bin” にpathを書く
- “main” で指定されたファイルが、require ‘パッケージ名’ された時に読み込まれるファイルになる
もう一度npm initすれば対話形式で再編集できる。
ディレクトリ構成
.
├── History.txt
├── Makefile
├── README.md
├── lib
│ └── rocketio-client.js
├── node_modules
│
│ (node_modules内は多すぎなので省略)
│
├── sample
│ └── sample.coffee
├── server
│ ├── Gemfile
│ ├── Gemfile.lock
│ ├── Procfile
│ ├── README.md
│ ├── config.ru
│ ├── lib
│ ├── main.rb
│ ├── npm-debug.log
│ ├── public
│ │ ├── index.js
│ │ └── jquery.min.js
│ └── views
│ └── index.erb
└── src
└── rocketio-client.coffee
プログラムを書く
他の人のnpmを見ていると、大抵libディレクトリの下にjsを置くようだ。coffee-scriptを使ってる場合は、lib以外のディレクトリ(src等)を作ってcoffeeはそこに置いて、
都度jsにコンパイルしてlibに書き出す。
Makefileでやった。
サンプルコードを書く
requireはモジュール名やファイル名ではなくディレクトリ名を指定した場合に、そこにpackage.jsonがあれば”main”の項目に指定されたファイルを読み込んでくれる。なのでsample/sample.coffeeからrocketio-clientをrequireするには
RocketIO = require '../'と相対パスで書けばいい。
README.mdを書く
markdownでREADME.mdを書くとnpmjs.orgで綺麗に表示してくれる。publish
% npm publishnpmの開発者アカウントを作っていない場合は「adduserしろ」等の指示が表示される。言われたとおりにやる。
% npm adduser指示に従って入力していけばok
これでもう公開されているので、誰でもインストールしてすぐ使える。
開発中のnpmを公開前にローカルで試す方法
package.jsonのdependenciesにはgitリポジトリを指定できるので、それでインストールできる。もしくは普通nodeで開発している時はプロジェクトルートにnode_modulesというディレクトリができてその中にnpmがインストールされるので、シンボリックリンクでローカルの開発中のnpmに差し替えるという手もあると思う。