未捕获的错误:没有模块:MyApp

时间:2013-05-16 10:32:27

标签: javascript angularjs playframework requirejs

我在nodeJs框架中使用RequireJs加载AngularJs和jQuery。

那是main.js

    require.config({
    paths: {
        angular: 'vendor/angular.min',
        bootstrap: 'vendor/twitter/bootstrap',
        jquery: 'vendor/jquery-1.9.0.min',
        domReady: 'vendor/require/domReady',
        underscore: 'vendor/underscore.min'
    },
    shim: {
        angular: {
            deps: [ 'jquery' ],
            exports: 'angular'
        }
    }
});

require([
        'app',
        'angular-boot'
    ], function() {

});
app.js中的

 define(['angular'], function (angular) {
    return angular.module('MyApp', []);
})

并在angular-boot.js中

    define([ 'angular', 'domReady' ], function (angular, domReady) {
    domReady(function() {
        angular.bootstrap(document, ['MyApp']);
    });
});

在我的html文件中,我只有这一行,以声明和使用requirejs。 不是ng-ap或其他任何东西。

<script data-main="js/main" src="js/require.js"></script>

问题在于有时候会跑,有时候不会。 不运行时的错误是

  

未捕获错误:无模块:MyApp

如果有任何想法,我会非常感激。 非常感谢你。

1 个答案:

答案 0 :(得分:3)

在您的垫片中,您需要将app设置为angular-boot的依赖项。您的angular-boot文件取决于app(其中MyApp已定义),并且由于未指定这两个文件的加载顺序,有时会angular-boot加载app因而产生了这个错误。

要解决问题,只需更新您的垫片:

shim: {
  angular: {
    deps: [ 'jquery' ],
    exports: 'angular'
  },
  'angular-boot': {
    deps: ['app']
  }
}

而且,因为您不需要明确地包含'app',您的require电话可以简化为:

require(['angular-boot']);