Subscribed unsubscribe Subscribe Subscribe

Node+Socket.IOでminifyしたclient JSを使うには

Node.js

メモ書き。7/25日現在 Socket.IOはv0.7.7。
通常、NodeでSocket.IOを使うときは

require('socket.io').listen(3000);

とやった場合、[]http://localhost:3000/socket.io/socket.io.js[]で、socket.io-clientにあるクライアント側用のJavaScriptを配信してくれるようになるのだけど、どうもこれをminifyしたものも用意されているようでlib/manager.jsを覗くと

  , paths: {
        '/static/flashsocket/WebSocketMain.swf': client.dist + '/WebSocketMain.swf'
      , '/static/flashsocket/WebSocketMainInsecure.swf':
          client.dist + '/WebSocketMainInsecure.swf'
      , '/socket.io.js':  client.dist + '/socket.io.js'
      , '/socket.io.js.min': client.dist + '/socket.io.min.js'

って書いてある。どういうことか分からず、とりあえず[]http://localhost:3000/socket.io/socket.io.js.min[]をブラウザで開いてみるとサーバがエラーになって死んでしまう。なんてこった。
よくよく読んでみるとその先で

  var static = Manager.static
    , extension = data.path.split('.').pop()
    , file = data.path + (this.enabled('browser client minification')
        && extension == 'js' ? '.min' : '')
    , location = static.paths[file]

と配信するパスに応じて参照するファイルを決めているところがあるのだけど、ここで'browser client minification'なる設定値を見て判定している。こちらをちゃんと使わないと意味がなかったようだ。
というわけで

var io = require('socket.io').listen(3000);
io.enable('browser client minification');

としてやって起動して[]http://localhost:3000/socket.io/socket.io.js[]を叩いてみるとminifyされた方が無事に取れた。


それにしても"/socket.io/socket.io.js.min"を叩くと死んでしまうのはちょっとマズい気がするな…バグとして報告しておこうかな

追記

pull req送ってみたけど、そもそもそのへんの仕組み大改造中だったようで不要だった。
https://github.com/LearnBoost/socket.io/pull/423