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
当您压缩,你需要知道,依赖注入(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被缩小为a。 a对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'
}
'use strict'; angular.module( 'HeaderCtrl',[])。控制器( 'headerController', [ '$位置', '$窗口', '$ stateParams', '$日志', 'HeaderFactory', '使用者资料', 函数($ location,$ window,$ stateParams,$ log,headerFactory,userDataService)var vm = this; vm。profile = []; //用户配置文件详细信息 function init(){ }; init(); } ] );上面的 – user7353226
是我的控制器代码的格式。 – user7353226
您提供的控制器看起来完全可以安全地进行缩小,您确定您没有在其他控制器上犯过错误吗?尝试启用[严格DI模式](https://docs.angularjs.org/guide/production)。 –
什么依赖你使用的是否定注释?如果您使用隐式注释,您的服务名称将在缩小过程中重命名并中断您的应用程序。 – Und3rTow
你能举一个你的控制器或指令的例子吗? –
我提供了以下 – user7353226