我的Angular
应用程序具有以下结构
- src/app/main/
|
-main.js
-main.controller.js
-index.html
我正在使用Gulp。构建完成后,*.js
文件将以index.html
中的错误顺序注入。文件main.js
取决于main.controller.js
,因此必须在main.controller.js
之前注入main.js
。
<!-- build:js({.tmp/serve,.tmp/partials,src}) scripts/app.js -->
<!-- inject:js -->
<script src="app/main/main.js"></script>
<script src="app/main/main.controller.js"></script>
<script src="app/index.js"></script>
<!-- endinject -->
这是我的gulpfile.js
'use strict';
var gulp = require('gulp');
var gutil = require('gulp-util');
var wrench = require('wrench');
var options = {
src: 'src',
dist: 'dist',
tmp: '.tmp',
e2e: 'e2e',
errorHandler: function(title) {
return function(err) {
gutil.log(gutil.colors.red('[' + title + ']'), err.toString());
this.emit('end');
};
},
wiredep: {
directory: 'bower_components',
exclude: [/jquery/, /bootstrap-sass-official\/.*\.js/, /bootstrap\.css/]
}
};
wrench.readdirSyncRecursive('./gulp').filter(function(file) {
return (/\.(js|coffee)$/i).test(file);
}).map(function(file) {
require('./gulp/' + file)(options);
});
gulp.task('default', ['clean'], function () {
gulp.start('build');
});
答案 0 :(得分:2)
在inject.js中使用gulp-angular-filesort
https://www.npmjs.com/package/gulp-angular-filesort
要正常工作,每个角度文件都需要具有唯一名称 模块和setter语法(带括号),即 angular.module('myModule',[])。
示例inject.js:
module.exports = function(options) {
gulp.task('inject', ['scripts', 'styles'], function () {
var injectStyles = gulp.src([
options.tmp + '/serve/app/**/*.css',
'!' + options.tmp + '/serve/app/vendor.css'
], { read: false });
var injectScripts = gulp.src([
options.src + '/app/**/*.js',
'!' + options.src + '/app/**/*.spec.js',
'!' + options.src + '/app/**/*.mock.js'
])
.pipe($.angularFilesort()).on('error', options.errorHandler('AngularFilesort'));
var injectOptions = {
ignorePath: [options.src, options.tmp + '/serve'],
addRootSlash: false
};
return gulp.src(options.src + '/*.html')
.pipe($.inject(injectStyles, injectOptions))
.pipe($.inject(injectScripts, injectOptions))
.pipe(wiredep(options.wiredep))
.pipe(gulp.dest(options.tmp + '/serve'));
});
};
答案 1 :(得分:2)
我首先在Gulp源数组中定义重要的js文件:
var target = gulp.src('app/index.html');
var sources = gulp.src(['app/scripts/core/app.js','app/scripts/**/*.js'], {read: false});
target.pipe(inject(sources, {})).pipe(gulp.dest('app'));
答案 2 :(得分:0)
我使用gulp-natural-sort和stream-series模块解决了这个问题。 gulp-natural-sort
按照一致的顺序对您的文件进行排序,stream-series
采用多个文件流并将其中一个放在另一个之前。
我的代码如下所示:
var series = require('stream-series');
var naturalSort = require('gulp-natural-sort');
gulp.task('inject', function() {
log('Injecting custom scripts to index.html');
var theseComeFirst = gulp.src(["somepath/first*.js", {read: false}).pipe(naturalSort());
var theseComeSecond = gulp.src("somepath/second*.js", {read: false}).pipe(naturalSort());
return gulp
.src("*.html")
.pipe($.plumber({errorHandler: handleError}))
.pipe($.inject(series(theseComeFirst, theseComeSecond), {relative: true}))
.pipe(gulp.dest('client/'));
});
您可以使用流系列,只要您不关心其他人是否有序。不幸的是,每次运行时,inject()都会将文件放在一个有点随机顺序的系列组中,这给了我heebee jeebees。