WebmoをNode.jsから使う

昨日の記事でも紹介したWebmoはJavaScriptで簡単に操作できることがウリですが、現状用意されているライブラリはブラウザ上で動作することを前提に設計されており、Node.jsで実行するとエラーが起きます。

エラーを直して本家にpull requestを送ろうと思っていたのですが、そう簡単ではなかったので、Node.js用に移植した新しいnpmパッケージ webmo-client-nodejs を作って公開しました。

依存ライブラリがブラウザ前提に設計されているため、サンプルコードを実行すると
ReferenceError: self is not defined というようなエラーが出ます。


変更点

  • 本家 webmo-client が依存していたqwestやQといったブラウザ用ライブラリを一掃して、websocketのようなNode.jsで足りていないライブラリを読み込むようにしました。
  • 開発言語をJavaScriptからTypeScriptにしました。
  • ビルド時、ブラウザ用にwebpackで固めていたのをtscでコンパイルするだけにしました。

詳しくはGitHubのCommitsを見てみてください。

require(‘webmo-client-nodejs’)

変更点は上の通り表層的な部分だけなので、実際の使い方は本家とほぼ同じです。ブラウザ用に require('webmo-client') と書いていた部分を require('webmo-client-nodejs') とすれば同じJavaScriptコードが動きます。サンプルコードを webmo-example-nodejs に置きましたが、めちゃくちゃ短いのでこちらにも貼っておきます。Webmo便利ですね!

var WebmoWs = require('webmo-client-nodejs').ws
var motor = new WebmoWs("webmo.local")

motor.onopen = () => {
  motor.rotate(90)
  setTimeout(() => { motor.stop(); motor.close(); }, 2000)
}

上の例はWebSocketを使っていますが、HTTPもテスト済みです。

var WebmoHttp = require('webmo-client-nodejs').http
var motor = new WebmoHttp("webmo.local")
process.stdout.write('testing http client ...');

motor.rotate(-90)
.then(() => {
  setTimeout(() => {
    motor.stop()
    .then(() => {
      process.stdout.write(' ok\n');
    });
  }, 2000);
});

というわけで、Happy hacking with Webmo!


No Comments

Be the first to start a conversation

Leave a Reply

  • (will not be published)