2016-12-06 71 views
0

我有一個應用程序,它使用了很多不同的js文件。當我用gulp正常編譯應用程序時,一切運行良好,但是當我在一個文件中編譯所有內容以縮小它時,出現錯誤(Uncaught Error: [$injector:modulerr])。縮小編譯的角度依賴問題

app-55bb2aca73.js:4 Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.5.8/$injector/modulerr?p0=app&p1=Error%3A%20%…http%3A%2F%2Flocalhost%3A8080%2Fbuild%2Fjs%2Fapp-55bb2aca73.js%3A4%3A30075) 
    at app-55bb2aca73.js:4 
    ... 

這裏是我的gulpfile.js(使用Laravels elexir插件):

mix.scripts([ 

     /*libs*/ 
     '../../../node_modules/jquery/dist/jquery.slim.min.js', 
     '../../../node_modules/bootstrap/dist/js/bootstrap.min.js', 
     '../../../node_modules/angular/angular.min.js', 
     '../../../node_modules/angular-cookies/angular-cookies.min.js', 
     '../../../node_modules/pickadate/lib/compressed/picker.js', 
     '../../../node_modules/pickadate/lib/compressed/picker.date.js', 
     '../../../node_modules/pickadate/lib/compressed/picker.time.js', 

     'app.js', 
     'config/*.js', 
     'angular/controller/*.js' 

    ], 'public/js/app.js'); 

這裏app.js:

var app = angular.module("app", ['ngCookies'], function ($interpolateProvider) { 
    $interpolateProvider.startSymbol('<%'); 
    $interpolateProvider.endSymbol('%>'); 
}); 

例如這裏開始控制器:

app.controller('someCtrl', function ($scope, $window, $http, $cookies) { 

有些有人知道爲什麼這不是在一個文件中工作?

回答

2

當您縮小時,控制器方法名稱將被刪除。需要以這種方式包括有一個參考:

app.controller('someCtrl', ['$scope', '$window', '$http', '$cookies' 
    function ($scope, $window, $http, $cookies) { 
     // ... 
    } 
] 

這裏更多:https://docs.angularjs.org/guide/di

0

這可能是因爲系統角度用於根據作爲參數傳遞的變量的名稱注入依賴項。如果你是涅槃文件到一個單一的一個變量沒有保持相同的原始名稱,您應該手動注入的依賴關係如下:

var myApp = function ($interpolateProvider) { 
    $interpolateProvider.startSymbol('<%'); 
    $interpolateProvider.endSymbol('%>'); 
} 
myApp.$inject = ['$interpolateProvider']; 

angular.module("app", ['ngCookies'], myApp); 

...在你的控制器:

app.controller('someCtrl', controlFn); 

var controlFn = function ($scope, $window, $http, $cookies) {}; 
controlFn.$inject = ['$scope', '$window', '$http', '$cookies'];