Gulp uglify导致AngularJS无法解决提供者

时间:2015-12-29 19:15:35

标签: javascript angularjs dependency-injection gulp bundling-and-minification

虽然我熟悉使用Angular 时的uglify问题,但是现在我开始使用特定的指令再次遇到这个问题,即使我使用类似数组的样式进行依赖声明:< / p>

angular.module('app.directives').directive('domainImg', ['Endpoint', function (Endpoint) {
    return {
        restrict: 'A',
        controller: function ($scope, $element, $attrs) {
            $attrs.$set('ngSrc', Endpoint + $attrs.ngSrc);
        }
    };
}]);

我的主文件分别声明模块。

angular.module('app.providers', []).constant('Endpoint', 'http://www.multzfidelidade.com.br/sistema/');
angular.module('app.tools', []);
angular.module('app.services', []);
angular.module('app.resources', []);
angular.module('app.controllers', []);
angular.module('app.directives', []);
angular.module('App', ['ui.mask', 'templates', 'app.providers', 'app.tools', 'app.services', 'app.resources', 'app.controllers', 'app.directives'])

现在,当我使用此指令时,我得到未知的eProvider&lt; - e 问题

  

错误:[$ injector:unpr] http://errors.angularjs.org/1.4.8/ $ injector / unpr?p0 = rProvider%20%3C-%20r

我这样使用:

<img class="prize-directive-image" ng-src="{{prize.image}}" domain-img/>

如果我删除 domain-img 标记,则问题就会消失。此外,如果我只是不解释代码,问题也会消失。

gulp.task('default', function () {
    // Concat all JS files into a single one called app.min.js
    gulp.src(['public_html/js/*.js', 'public_html/js/**/*.js', 'public_html/*.js', 'public_html/modules/**/*.js', '!public_html/app.min.js'])
        .pipe(concat('app.min.js'))
        // .pipe(uglify()) // Without this line the problem doesn't happen
        .pipe(gulp.dest('dist/'));

    // Concat all HTML directives into a single one
    gulp.src('public_html/js/**/**/*.html')
        .pipe(htmlmin({collapseWhitespace: true}))
        .pipe(templateCache('templates.min.js', {standalone: true}))
        .pipe(gulp.dest('dist/'));
})

我希望能够在这个具体指令中找到我可能出错的地方。

提前谢谢。

3 个答案:

答案 0 :(得分:2)

您错过了对DI的内联数组注释,例如指令的控制器。

代码

controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
      $attrs.$set('ngSrc', Endpoint + $attrs.ngSrc);
}]`

答案 1 :(得分:1)

您需要更改指令controller的语法,如下所示:

controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
        $attrs.$set('ngSrc', Endpoint + $attrs.ngSrc);
    }]

请查看this了解更多细节。

答案 2 :(得分:1)

或者你可以像现在一样离开它并使用GulpJS为你做注释。在我的项目SkeletonSPA中,我做的完全一样。

我使用GulpJS插件gulp-ng-annotate为我做这个。您的Gulp任务外观将如下所示:

// require gulp-ng-annotate plugin
let ngannotate = require('gulp-ng-annotate');

// Concat all JS files into a single one called app.min.js
gulp.src(['public_html/js/*.js', 'public_html/js/**/*.js', 'public_html/*.js', 'public_html/modules/**/*.js', '!public_html/app.min.js'])
  .pipe(ngannotate({gulpWarnings: false})) // annotate angular DI
  .pipe(concat('app.min.js'))
  .pipe(uglify()) // do the minification
  .pipe(gulp.dest('dist/'));

通过这种方式,您不必自己动手,而您的Gulp任务会为您完成; - )