如何使用参数启动Gulp任务?

5

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

期望的解决方案。

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

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

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,您基本上可以创建一个管道以备将来使用;希望这有所帮助。

1
抱歉,因为声望不足,无法评论。
我假设您的示例代码并不包含所有内容,但是为什么不将这些任务合并,并在构建任务中使用gulp.src(),而不是调用另一个任务呢?
也许对您有用,但是根据您展示的内容,我找不到为什么要这样做而不是简单地选择类似以下内容的东西:
gulp.task('build', function (path) {
    gulp.src('bundles/**/*.js)
    //Your code for this task
});

当然,它可以去除捆绑任务,但它本身并不实用。如果我有错误,请毫不犹豫地评论,我会尽力帮助您。


0
首先,gulp.task('build', function (path) 永远不会起作用。Gulp 任务的唯一有效参数是回调函数,用于表示异步任务完成。如果您尝试运行上述代码,Gulp 将期望 path 是一个函数,并且除非调用该函数,否则任务将永远无法完成。在此示例中,“build”任务应该是从“bundles”管道调用的常规函数,而不是任务。
更好的问题是:如何在 Gulp 管道内运行自定义函数?像 gulp-tap 这样的插件可能会让您接近目标,但创建本质上是内联 Gulp 插件以调用您的函数并不困难。
Gulp 管道接收包含 vinyl 文件对象、编码和回调函数的 through2 对象流。以下是针对 Gulp 管道中文件调用任意函数的基本框架:
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缓冲区。要重命名或移动文件,请更改file.path。所有操作都可以在gulp的本地管道中完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接