如何使用params启动Gulp任务?

时间:2014-05-25 21:30:41

标签: gulp

我需要为特定文件应用构建任务。为了找到它们,我使用典型的模板。但我无法理解如何从gulp.src传递参数(文件路径)。

理想的解决方案。

gulp.task('bundles', function() {
  gulp.src('bundles/**/*.js').
    pipe(gulp.start('build', file.path));
});

gulp.task('build', function (path) {
  // use here
});

3 个答案:

答案 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管道接收包含through2vinyl 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的原生管道完成。