我需要为特定文件应用构建任务。为了找到它们,我使用典型的模板。但我无法理解如何从gulp.src传递参数(文件路径)。
理想的解决方案。
gulp.task('bundles', function() {
gulp.src('bundles/**/*.js').
pipe(gulp.start('build', file.path));
});
gulp.task('build', function (path) {
// use here
});
答案 0 :(得分:1)
(由于代表不能评论,抱歉)
我认为您的示例代码并未包含所有内容,但为什么不合并这些任务并在构建任务中使用gulp.src()而不是调用其他任务。
也许它对你很有用,但是通过你所展示的内容,我无法找到解释你为什么这样做的原因,而不是简单地使用以下内容:
gulp.task('build', function (path) {
gulp.src('bundles/**/*.js)
//Your code for this task
});
当然,它删除了捆绑任务,但它没有用。 如果我错了,请不要犹豫,我会尽可能地帮助你。
答案 1 :(得分:1)
问题有点陈旧,我不确定我完全理解你在这里想要达到的目标,但我认为你正在寻找的是lazypipe
如果您不是在寻找
,那么您可能想澄清一下您的问题示例用法:
var lazypipe = require('lazypipe'),
g = require('gulp-load-plugins')({lazy: true}),
jsTransformPipe = lazypipe()
.pipe(g.jshint) // <-- Notice the notation: g.jshint, not g.jshint()
.pipe(g.concat, 'bundle.js'), // <-- Notice how the param is passed to g.concat, as a second param to .pipe()
jsSourcePipe = lazypipe()
.pipe(gulp.src, './**/*.js');
gulp.task('bundle', function() {
jsSourcePipe()
.pipe(jsTransformPipe()) // <-- You execute the lazypipe by calling it as a function
.pipe(gulp.dest('../build/');
});
使用lazypipe
,您基本上可以创建一个管道供将来使用;希望这个帮助
答案 2 :(得分:0)
首先,empty
无法工作。 gulp任务唯一有效的参数是一个回调信号异步任务完成。如果您尝试运行上述操作,gulp会希望gulp.task('build', function (path)
成为一个函数,除非调用该函数,否则任务永远不会完成。在这个例子中,&#39; build&#39;任务应该是一个从“捆绑”中调用的常规函数。管道,而不是任务。
更好的问题是:如何在gulp管道中运行自定义功能?像gulp-tap这样的插件可能会让你接近,但创建本质上是一个内联gulp插件来调用你的函数并不困难。
Gulp管道接收包含through2的vinyl file object对象流,编码和回调。这是对gulp管道中的文件调用任意函数的基本框架:
path
这可能非常强大。要修改文件的内容,只需更改var gulp = require('gulp');
var through = require('through2');
gulp.task('stack', function() {
return gulp.src('./src/*.js')
.pipe(through.obj(function(file, enc, cb) {
// file.path is the full path to the file
myBuildFunction(file.path);
cb(null, file);
}))
.pipe(gulp.dest('./build/'));
})
缓冲区即可。要重命名或重定位文件,请更改file.contents
。一切都可以用gulp的原生管道完成。