LoginSignup
4
3

More than 5 years have passed since last update.

Appcelerator CLIで [Error: Module did not self-register.] と出るようになった

Last updated at Posted at 2015-10-23

今まで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 フラグを付けて実行することで、指定したバージョンを強制的に再インストールすれば良いようです。

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3