2013-05-16 65 views
1

我在nodeJs框架中使用RequireJs加載AngularJs和jQuery。未被捕獲的錯誤:沒有模塊:MyApp

也就是說在app.js

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

和角boot.js

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

在我的HTML文件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() { 

}); 

我只有這條線,以聲明和使用requirejs。 不是ng-ap或其他東西。

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

問題是,有時運行,有時不運行。 當它不運行的錯誤是

Uncaught Error: No module: MyApp

如果有任何關於它的想法,我就真的很感激。 非常感謝。

回答

3

在你的墊子中,你需要設置app作爲依賴到angular-boot。您的angular-boot文件取決於app(其中定義了MyApp),並且因爲未指定這兩個文件的加載順序,所以有時angular-boot會在app之前加載,從而產生該錯誤。

爲了補救,只是更新您的墊片這樣:

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

比,因爲你並不需要包括「應用程序」明確您的通話require可以簡化爲:

require(['angular-boot']); 
+0

不幸的是,它並沒有幫助我。還有什麼其他選擇可以嘗試? – martinixs

+0

@martinixs如果這個答案對你沒有幫助,那就意味着你有一個不同的問題。你可能想創建一個單獨的問題,引用這個問題。 – Stewie

+0

需要注意的是,您必須使用填充,而不是簡單地將「app」添加爲requirejs依賴項。墊片指定加載順序(或至少允許您更多的控制)比需要功能。 –

相關問題