我想从bower依赖项中获取供应商js文件,并且与我自己的js文件一起,管理其他一些任务并将它们连接成一个.js文件。然后对Sass文件执行相同的操作。
我怎么能实现这一目标?我试过这个,但它不起作用:
gulp.task('scripts', function () {
return gulp.src([
mainBowerFiles(gulpFilter('*.js')),
'app/js/*.js'
])
.pipe(uglify())
.pipe(concat('app.js'))
.pipe(gulp.dest('./dist/js'));
});
它抛出了这个错误:
TypeError: Arguments to path.resolve must be strings
但如果我有这个,那就有用了,例如:
gulp.src([
'app/js/etc.js',
'app/js/main.js'
])
..在下面的例子中,它会抛出一个不同的错误(但没有uglify()没有错误):
gulp.src(mainBowerFiles(gulpFilter('*.js')))
错误:
events.js:72
throw er; // Unhandled 'error' event
如何更好地调试此问题?我应该在不同的流中分离供应商/自己的js文件吗?
更新
我现在正在使用两个流,稍后将它们与event-stream
合并,如下所示:
gulp.task('scripts', function () {
var jsFilter = gulpFilter('*.js');
var vendorFiles = gulp.src(mainBowerFiles()) // don't read
.pipe(jsFilter)
.pipe(concat('vendor.js'));
var appFiles = gulp.src('app/js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('app.js'));
return es.concat(vendorFiles, appFiles)
.pipe(uglify())
.pipe(concat('app.js'))
.pipe(gulp.dest('./dist/js'));
});
效果很好,但我无法处理文件的顺序。显然,我希望供应商代码出现在目的地app.js
的代码之前,但事实并非如此。我创建了一个关于here的帖子。
答案 0 :(得分:3)
使用gulp-event-stream和gulp-order解决了问题。尽管如此,让我感到有点意味着gulp-order在向下https://www.npmjs.org呈下降趋势。
gulp.task('scripts', function () {
var jsFilter = gulpFilter('*.js');
var vendorFiles = gulp.src(mainBowerFiles())
.pipe(jsFilter)
.pipe(concat('vendor.js'));
var appFiles = gulp.src('app/js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('app.js'));
return eventStream.concat(vendorFiles, appFiles)
.pipe(order([
"vendor.js",
"app.js"
]))
.pipe(concat('app.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist/js'));
});
答案 1 :(得分:1)
mainBowerFiles()返回一个数组。 gulp.src期待一个字符串数组,而不是嵌套数组,这可能是第一个问题的原因。您可以尝试以下方法:
gulp.src(mainBowerFiles(gulpFilter('*.js')).push('app/js/*.js'))
我不确定是什么导致了未处理的错误事件,但您可以尝试使用gulp-debug来获取更多信息。