今までTitaniumアプリの開発にはNode.js v0.10系を使っていたのですが、ふと Titanium Compatibility Matrix を見たら、MAXバージョンがv0.12.7になっていました。(さらにさっき見たら、さらにv4.1.xになっていました)
そこで、さっそくv0.12.7を入れて使ってみようとしたところ、 appc
コマンドを叩くたびに [Error: Module did not self-register.]
というメッセージが出力されるようになってしまいました。
Issueはあがっている ので、いずれAppcelerator CLI側で何かしら対策をしてくれると思いますが、現時点での対策方法があったので、メモっておきます。
※上記IssueにはNode.js v0.12.7とAppc CLI v5.0.2の組み合わせとのことでしたが、私の環境ではAppc CLI v5.0.1やv5.0.3でも発生したので、v0.10系からv0.12系に移行した場合に発生しやすいのではないかと思っています。
環境および発生手順
環境 | バージョン |
---|---|
OS | Mac OS X 10.10.5 |
Xcode | 6.4 |
Command Line Tools | 7.0 |
Node | v0.10.40 → v0.12.7 |
Appcelerator CLI (npm) | 4.2.0 |
さらに、Node.jsのバージョン管理には ndenv を使っています。
もともとndenvでv0.10.40を入れて使っていた環境にv0.12.7を追加し、そこに改めてAppcelerator CLIをはじめ、必要なnpmパッケージをインストールして使ってみたところ、今回の問題が発生しました。
対処方法
原因は、Node.jsのバージョンが切り替えた際に、ネイティブ拡張を含むnpmパッケージが壊れてしまうことにあるようです。
そこで、このエラーが発生するAppcelerator CLI Coreの package フォルダへ移動し、 npm rebuild
を実行して、環境を再構築することで、修復することができました。
バージョン部分は、適宜使っている環境に合わせて読み替えてください。
$ cd ~/.appcelerator/install/5.0.2/package
$ npm rebuild
使用するNode.jsのバージョンを切り替えると、またエラーが発生するので、そのときは再度同じ手順を実行すればOKのようです。
また、実行時に bufferutil
関連のエラーで失敗する場合は、以下の記事も参考にしてみてください。
Appcelerator CLI Coreのインストールでbufferutilのビルドがエラーになる - Qiita
2016/04/08 追記
Understanding the Unified Appcelerator CLI
この問題は、やはりndenvなどNode.jsのバージョンを切り替えるツールを使った場合に発生するものということで、Appcelerator CLI v4.2.2で対策され、自動的に修正するようになったようです。
もしそれでも同じ現象が発生する場合は、 appc use 5.2.0 --force
というように --force
フラグを付けて実行することで、指定したバージョンを強制的に再インストールすれば良いようです。