Gulp流在文件写入之前完成
Gulp stream finishes before file is written
我们的构建过程通过browserify运行app.js
来处理require()
语句,然后将结果与其他一些脚本连接起来创建scripts.js
。这是在两个独立的任务中完成的。
由于某种原因,第一个任务在写入文件之前结束,导致app.js
被排除在构建之外。这个任务是从这个Gulp食谱复制过来的,只做了最小的修改。
下面是我们的gulpfile的相关部分:
gulp.task('scripts', ['angular', 'views-js'], function () {
var bundledStream = through();
bundledStream
.pipe(source('app.js'))
.pipe(buffer())
.pipe(debug())
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write(paths.target))
.pipe(gulp.dest(paths.target));
globby([paths.scripts], function(err, entries) {
if (err) {
bundledStream.emit('error', err);
return;
}
var b = browserify({
entries: entries,
debug: true,
});
b.bundle().pipe(bundledStream);
});
return bundledStream;
});
// Take all the scripts in the target directory and concatenate them to scripts.js.
gulp.task('scripts-all', ['scripts'], function () {
return gulp.src([path.join(paths.target, '*.js'), '!'+path.join(paths.target, 'scripts.js')])
.pipe(debug())
.pipe(concat('scripts.js'))
.pipe(header(banner, { pkg : pkg } ))
.pipe(gulp.dest(paths.target))
.pipe(livereload(reloadServer));
});
这就是我们构建时发生的事情。注意,.debug()
管道在任务完成后执行。这将导致文件在scripts-all
中错过.src()
扫描。
[16:57:46] Starting 'scripts'...
[16:57:46] Finished 'views' after 835 ms
[16:57:47] Finished 'scripts' after 749 ms
[16:57:47] Starting 'scripts-all'...
[16:57:47] gulp-debug: (2015-09-28 13:57:47 UTC)
File
cwd: ~/projects/ourProject
base: ~/projects/ourProject
path: ~/projects/ourProject/app.js
contents: (function e(t,n,r){function s(o,u){if(!n...
[16:57:48] gulp-debug: end event fired (2015-09-28 13:57:48 UTC)
我们做错了什么?
我不知道globby
,但文档说它返回一个承诺。我的猜测是,当它完成并从您传入的函数返回时,承诺将被解决。您可能需要返回承诺以阻止任务完成。
如果这不能解决这个问题,我会尝试创建自己的承诺,并在bundledStream
的'end'
事件处理程序中解决它,因为它看起来像你想在bundledStream
完成其工作时解决任务。
var Q = require('q');
gulp.task('scripts', ['angular', 'views-js'], function () {
var bundledStream = through();
var deferred = Q.defer();
bundledStream
.pipe(source('app.js'))
.pipe(buffer())
.pipe(debug())
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write(paths.target))
.pipe(gulp.dest(paths.target))
.on('end', function()
{
deferred.resolve();
});
....
return deferred.promise;
我没有测试你的特定任务,但这是我昨天处理类似问题的方法
相关文章:
- gulp-if-javascript文件,但不在gulp-useref的特定目录中
- 使用Gulp手柄部分编译为单个HTML文件
- 如何使用gulp-inject将文件的内容插入到我的index.html中
- 使用gulp-angular gettext从JS文件中提取字符串不起作用
- gulp重命名多个文件
- Gulp和FTP:如何只传输文件夹的内容
- 当源文件夹中有多个jade文件时,gulp-ejade只构建一个HTML文件
- 如何使用gulp-test和karma在浏览器中调试Javascript测试文件
- Gulp uglified文件中未定义角度
- 如何在Gulp任务中拆分文件
- 使用Gulp删除所有例外文件
- 使用 gulp 访问打字稿文件变量值
- Gulp js src :首先获取最深的文件
- 使用 gulp 将打字稿导出提取到 json 文件
- gulp-install 不安装带有乙烯基文件的依赖项
- 如何使用 Gulp 和 gulp 数据从单个 jade 模板生成多个 html 文件
- 使用gulp和browserfy从脚本文件进程访问Jquery库
- Gulp.js - 无法将生成的文件从一个文件夹复制到另一个文件夹
- 我可以使用gulp将一个文件中的内容插入另一个文件吗
- gulp-main-bower文件正则表达式过滤器不起作用