Angularjs 狼吞虎咽+;未捕获错误:[$injector:moduler]

Angularjs 狼吞虎咽+;未捕获错误:[$injector:moduler],angularjs,gulp,gulp-concat,gulp-uglify,Angularjs,Gulp,Gulp Concat,Gulp Uglify,试图丑化js文件。当我在index.html中使用捆绑文件时。我得到下面的错误 下面是我的吞咽文件 'use-strict' var gulp = require('gulp'); var uglify = require('gulp-uglify'); var concat = require('gulp-concat'); var exec = require('gulp-exec'); var ngAnnotate = require('gulp-ng-annotate'); const

试图丑化js文件。当我在
index.html
中使用捆绑文件时。我得到下面的错误

下面是我的吞咽文件

'use-strict'
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var exec = require('gulp-exec');
var ngAnnotate = require('gulp-ng-annotate');
const babel = require('gulp-babel');
var exec = require('child_process').exec;
gulp.task('scripts', function () {
return gulp.src(['vzrth.js','psrhs.js'])
.pipe(ngAnnotate())
    .pipe(babel({
      presets: ['es2015']
    }))
    .pipe(concat('bundle.js'))
    .pipe(uglify().on('error', function (e) {
      console.log(e);
    }))
    .pipe(gulp.dest('./client'));
});
gulp.task('nodestart', function (cb) {
  exec('node ./bin/www', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
})
gulp.task('default', ['scripts', 'nodestart']);
我得到的错误是:

参考错误:未捕获错误:[$injector:moduler] $injector/modulerr?p0=e


当您缩小angular文件时,您需要意识到,如果操作不正确,依赖项注入(DI)将中断

这是带有DI的控制器的缩小示例:

.controller('MyController', function($scope, $timeout) {
    $scope.title = 'Minify me';
});
.controller('MyController', ['$scope', '$timeout', function ($scope, $timeout) {
   $scope.title = 'Minify me';
}]);
这是具有DI的同一控制器的小型化安全示例:

.controller('MyController', function($scope, $timeout) {
    $scope.title = 'Minify me';
});
.controller('MyController', ['$scope', '$timeout', function ($scope, $timeout) {
   $scope.title = 'Minify me';
}]);
缩小时为什么第一个示例会中断?

缩小javascript文件时,函数中的参数将缩小为更简单的参数,因此这将是缩小后的控制器: 首先是不安全的例子:

.controller('MyController', function(a, b) {
    a.title = 'Minify me';
});
如您所见,$scope已缩小为aa对Angular没有任何意义(除非您实际拥有定义为a的服务)

现在是“缩小安全”示例:

.controller('MyController', ['$scope', '$timeout', function (a, b) {
       a.title = 'Minify me';
    }]);
在本例中,Angular知道第一个参数实际上是$scope,因为字符串文本不会缩小

编辑:

如果您这样声明控制器或指令(缩小不安全):

这将成为(方法1):

否则这将成为(方法2)


上述答案已经过时,现在只需使用Nganotate即可解决此问题。 可以这样做:

 .pipe(concat('app.js'))
 .pipe(ngAnnotate())
 .pipe(uglify())
 .pipe(gulp.dest('./gulp/js'))
首先对文件进行加密,然后使用ngAnnotate,然后使用uglify。 为此,您需要“吞咽ng注释”:

var ngAnnotate = require('gulp-ng-annotate');

ngAnnotate将修复您的依赖项问题。

您使用的依赖项批注是什么?如果你使用隐式注释,你的服务名称将在缩小过程中被重命名,并破坏你的应用程序。你能提供一个你的控制器或指令的例子吗?我在下面提供了“严格使用”;angular.module('HeaderCtrl',[]).controller('headerController',['$location','$window','$stateParams','$log','HeaderFactory','UserDataService',function($location,$window,$stateParams,$log,HeaderFactory,UserDataService){var vm=this;vm.profile=[];//用户配置文件详细信息数组函数init(){};init();}]);您提供的控制器看起来完全可以安全缩小,您确定您没有在其他控制器上出错吗?尝试启用。我们可以使用ng annotate获取所需的详细信息吗。有什么想法吗?我自己从来没用过。我不能对此发表评论。
var ngAnnotate = require('gulp-ng-annotate');