2015年4月3日金曜日

AppGyverのSupersonicを使ってdataアクセスするアプリを作っていて"Module 'common' is not available!"のエラーが出たら

AppGyverが提供しているハイブリッドアプリ開発のフレームワークSupersonic。

Supersonicを使ってアプリを作っていて、バックエンドのデータへアクセスする部分を組み込んだ途端、

Error: [$injector:nomod] Module 'common' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

というエラーが出て、ハマってしまったので、その備忘録。



アクセスしようとしたデータもnot found状態になる。





ここで要求されている「common」モジュールは、プロジェクトのディレクトリ下のapp/common/。

Supersonic Guides - Supersonic Framework Utilising the common module
The common module also already contains a layout file (located at app/common/views/layout.html), which has all the basic dependecies of your project declared, such as supersonic.js, steroids.js and cordova.js. Because common is declared as a dependency to all modules by default, the layout file in there can be used to throughout the app just by removing any layout files from the module itself.

Supersonicを使ったアプリのレイアウトなど基本的な部分で使われているモジュール。

自分のプロジェクトには、確かにそのディレクトリが無い。


レイアウトという時点で、もしやと思ったのは、シンプルページアプリケーションとして、プロジェクトを作ったことがボトルネックになっているのではないか、マルチページアプリケーションとして、そもそもプロジェクトを作っていないと、このcommonモジュールはapp下にデプロイされないんじゃないか?ということ。


試しに、プロジェクトをマルチページで、一から作りなおしてみる。

$ steroids create プロジェクト名

続くアプリタイプの選択で、デフォルトのマルチページタイプを選択。



改めて、新しく作ったプロジェクトで、データのリポジトリを作り、テストデータを入れてみたら、今度はエラーが出ない!

テストデータも表示されている。




commonモジュールが無いエラーで嵌ったら、プロジェクトをマルチページタイプで作りなおせばOKです。


シングルページタイプのアプリでSueprsonicのdata APIが使えないということでは無いと思います。

あくまでも、Supersonicのチュートリアルを試していて、データのハンドリングをやりたいと思っただけなのに、commonモジュールにはまってしまった場合の対処方法です。