javascript - Gulp 任务根据参数具有不同的源

标签 javascript gulp dry yargs

我想使用 gulp 完成一些简单的事情。我想编写一个通用方法来将文件从特定源目录移动到输出目录。

假设我们有类似的东西

var args = require('yargs');
function transform-move-jsx-Development() 
{
  gulp.src(config.sourceJSX)
  .pipe(react, browserify, etc....)
  .pipe(gulp.dest(config.output_development));
};

function transform-move-jsx-Production() 
{
  gulp.src(config.sourceJSX)
  .pipe(react, browserify, etc....)
  .pipe(gulp.dest(config.output_production));
};

gulp.task('transform-move-jsx-Development', transform-move-jsx-Development);
gulp.task('transform-move-jsx-Production', transform-move-jsx-Production);

gulp.task('prod', [transform-move-jsx-Production]);
gulp.task('dev', ['transform-move-jsx-Development']);

这两个任务:transform-move-jsx-Production和transform-move-jsx-Development除了输出目录之外是相同的。我想让它更干燥(不要重复自己)。我应该能够创建一个可以使用 yarg 参数或其他正确参数的方法?在下一个示例中,我假设我可以将路径作为参数传递

所以我尝试使用 yargs 进行类似的操作

var args = require('yargs');

function transform-move-jsx() 
{ 
    return gulp.src(config.sourceJSX)
    .pipe(gulp.dest(args.outputDirectory));
};

gulp.task('dev', ['transform-move-jsx']);

但是现在需要我在命令行中向 gulp 调用添加参数

gulp dev --"path to output, etc."

随着我们从 dev gulp 任务内部调用越来越多的 gulp 任务,这显然不太容易维护。无论如何都会很困惑,因为我们不需要知道实现细节,比如运行 gulp dev 时的输出目录结构是什么

我可以这样做:

function transform-move-jsx(destination) 
{ 
    return gulp.src(config.sourceJSX)
    .pipe(gulp.dest(destination));
};

function transform-move-jsx-Development() 
{
    transform-move-jsx("./output/development/");
};

function transform-move-jsx-Production() 
{
    transform-move-jsx("./output/production/");
};

gulp.task('transform-move-jsx-Development',transform-move-jsx-Development);
gulp.task('transform-move-jsx-Production', transform-move-jsx-Production);

gulp.task('prod',  transform-move-jsx-Production);
gulp.task('dev',  transform-move-jsx-Development);

这看起来更好,因为它更灵活,但是现在我的 gulpfile 中散布着一些不必要的函数。

有更好的方法吗?

最佳答案

您的第二次尝试走在正确的轨道上,只需要利用一点 DRYclosures

function createTransformTaskClosure (destination) {
    return function () {
        return gulp.src(config.sourceJSX)
                   .pipe(gulp.dest(destination));
    };
}

gulp.task('dev', createTransformTaskClosure(config.output_development));
gulp.task('prod', createTransformTaskClosure(config.output_production));

关于javascript - Gulp 任务根据参数具有不同的源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322137/

相关文章:

javascript - 从 Google Spreadsheet 获取边框值时,如何避免对未定义的值进行多次 try catch (通过使用 if/else 或其他方式)?

javascript - Browserify 需要目录中的所有文件

c# - MVP、泛型和 DRY

functional-programming - 在 Haskell 函数定义中应用 DRY 的指南

javascript - 如何使用JS发送带附件的邮件?

javascript - 我可以自己更轻松地反转这些按钮吗?

ionic-framework - Ionic 中的 Gulp 不编译 sass 文件

c++ - 消除 C++ 代码中的重复?

javascript - 类更改后 JQuery 单击事件无法正常工作

javascript - Babel 重复的函数名