//ERRRORS SHOWN ON THE CONSOLE
main.lib.angular.js:1 Uncaught TypeError: Cannot read property 'noop' of undefined
main.lib.js:1 Uncaught TypeError: Cannot read property 'module' of undefined
main.user.js:1 Uncaught ReferenceError: angular is not defined
(index):52 Uncaught ReferenceError: angular is not defined

我正在为我的应用编写Gulp文件。该应用程序使用AngularJS及其库和其他一些库。但是当我uglify JS文件并将所有库文件连接成一个和所有用户定义的JS文件为一个时,我得到一个错误,说明angular未定义。我保留了uglified-concatenated文件的序列,以便在编译期间首先使用带有角度库的文件。但是,因为有更多的角度文件,除了angular.js之前的angular.js,我得到一个错误。这个问题有解决方案吗?此外,如果我没有连接角度库文件并导入它们,我仍然会得到其他注入模块的错误,因为没有定义。这是我写的gulpfile.js:
var gulp = require('gulp'),
uglify = require('gulp-uglify'),
plumber = require('gulp-plumber'),
rename = require('gulp-rename'),
browserSync = require('browser-sync')
reload = browserSync.reload,
concat = require('gulp-concat')
cleanCSS = require('gulp-clean-css');
var dest = './dest/'
//Angular apps
gulp.task('script-lib-ang', function() {
gulp.src('./lib/angular/*.js')
.pipe(plumber())
.pipe(uglify({
mangle: false
}))
.pipe(concat('main.lib.angular.js'))
.pipe(gulp.dest(dest))
.pipe(reload({
stream: true
}));
});
//Task for all the library javascript files
gulp.task('script-lib', ['script-lib-ang'], function() {
gulp.src(['./lib/**/*.js', '!./lib/angular/*.js'])
.pipe(plumber())
.pipe(uglify({
mangle: false
}))
.pipe(concat('main.lib.js'))
.pipe(gulp.dest(dest))
.pipe(reload({
stream: true
}));
});
//Task for all custom js files developed by the user
gulp.task('script-user', ['script-lib'], function() {
gulp.src('./app/**/*.js')
.pipe(plumber())
.pipe(uglify({
mangle: false
}))
.pipe(concat('main.user.js'))
.pipe(gulp.dest(dest))
.pipe(reload({
stream: true
}));
});
// gulp.task('css-user', function() {
// gulp.src(['./css/**/*.css', '!./css/lib/*.css'])
// .pipe(plumber())
// .pipe(cleanCSS())
// .pipe(concat('css-user.css'))
// .pipe(gulp.dest(dest))
// .pipe(reload({stream : true}));
// });
gulp.task('css-lib', function() {
gulp.src('./css/**/*.css')
.pipe(plumber())
.pipe(cleanCSS())
.pipe(concat('css-lib.css'))
.pipe(gulp.dest(dest))
.pipe(reload({
stream: true
}));
});
gulp.task('browser-sync', function() {
browserSync({
proxy: 'localhost',
ui: false
});
});
gulp.task('watch', function() {
gulp.watch('./lib/angular/*.js', ['script-lib-ang']);
gulp.watch(['./lib/**/*.js', '!./lib/angular/*.js'], ['script-lib']);
gulp.watch('./app/**/*.js', ['script-user']);
gulp.watch('./css/**/*.css', ['css-lib']);
});
gulp.task('default', ['script-lib-ang', 'script-lib', 'script-user', 'css-lib', 'browser-sync', 'watch']);

答案 0 :(得分:0)
如果您使用Bower作为客户端依赖项并使用像main-bower-files这样的npm包,它将按正确的顺序对所有库文件进行排序。为了实现项目苍蝇的正确顺序,我会明确地将它们命名为* .controler.js,* .module.js。这样你可以使用扩展来计算订单。
作为一个例子,我将声明一个具有正确文件顺序的变量和一个main-bower-files包的require,如:
var mainBowerFiles = require('main-bower-files');
var jsFilesLocation: [
appRoot + '**/*.module.js',
appRoot + '**/*.config.js',
appRoot + '**/*.service.js',
appRoot + '**/*.controller.js',
appRoot + '**/*.js'
];
/*Now using the Jsfileslocation and the main-bower-files plugin my task will look like*/
gulp.task('inject-js', function () {
return gulp.src(config.indexHtmlFileLocation)
/* Inject bower references */
.pipe(plugins.inject(gulp.src(mainBowerFiles(), { read: false }),
/*Inject Code Files */
.pipe(plugins.inject(gulp.src(jsFilesLocation, { read: false }),
{ relative: true }))
.pipe(gulp.dest(destinationPath));
});
如果你遵循这种模式,你不应该得到任何错误。这里有一篇关于如何改善gulp taks的精彩文章的链接:
http://www.johnpapa.net/angular-and-gulp/
谢谢你, 索马。
答案 1 :(得分:0)
我认为你需要使用gulp-ng-annotate来管理所有连接的angularjs文件,然后再缩小它们。这是连接和缩小所有js文件的任务示例:
gulp.task('scripts', function() {
return gulp.src(config.development.js)
.pipe(concat('app.js'))
.pipe(ngannotate())
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest(selectedConfig.ENV.name + '/dist/js'))
});