gulp-uglify +未捕获错误:[$ injector:modulerr]

问题描述:

试图丑化js文件。当我使用index.html中的软件包文件时。我得到以下错误。

下面是我的一个gulp文件。

'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']); 

我得到的错误是:

reference error: Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.5.8/ $injector/modulerr?p0=e

+0

什么依赖你使用的是否定注释?如果您使用隐式注释,您的服务名称将在缩小过程中重命名并中断您的应用程序。 – Und3rTow

+0

你能举一个你的控制器或指令的例子吗? –

+0

我提供了以下 – user7353226

当您压缩,你需要知道,依赖注入(DI)将打破,如果操作不当的角度文件。

这是一个控制器用DI一个微小UNSAFE例如:

.controller('MyController', function($scope, $timeout) { 
    $scope.title = 'Minify me'; 
}); 

这是相同的控制器用DI的微小SAFE例如:

.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'; 
    }); 

在这个例子中角都知道,第一个参数实际上是$范围因为一个字符串文字没有得到精缩。

编辑:

如果声明控制器或指令,像这样(再压缩不安全):

.controller('MyController', controller); 
function controller($scope, $timeout) { 
    $scope.title = 'Minify me' 
} 

这将成为(方法1):

.controller('MyController', controller); 
controller.$inject = ['$scope', '$timeout']; 
function controller($scope, $timeout) { 
    $scope.title = 'Minify me' 
} 

OR这将成为(方法2)

.controller('MyController', ['$scope','$timeout', controller]); 
function controller($scope, $timeout) { 
    $scope.title = 'Minify me' 
} 
+0

'use strict'; angular.module( 'HeaderCtrl',[])。控制器( 'headerController', [ '$位置', '$窗口', '$ stateParams', '$日志', 'HeaderFactory', '使用者资料', 函数($ location,$ window,$ stateParams,$ log,headerFactory,userDataService)var vm = this; vm。profile = []; //用户配置文件详细信息 function init(){ }; init(); } ] );上面的 – user7353226

+0

是我的控制器代码的格式。 – user7353226

+0

您提供的控制器看起来完全可以安全地进行缩小,您确定您没有在其他控制器上犯过错误吗?尝试启用[严格DI模式](https://docs.angularjs.org/guide/production)。 –