gulp-exec:如何根据源文件

时间:2016-06-04 08:00:14

标签: path gulp pandoc gulp-rename gulp-replace

我编写了一个gulp任务,根据以markdown格式编写的源文件生成pdf文件(使用gulp-exec插件和名为Pandoc的命令行工具)。

我的任务如下:

gulp.task('pandoc', function() {
  var options = {
    continueOnError: false,
    pipeStdout: false
  };
  var reportOptions = {
    err: true,
    stderr: true,
    stdout: true
  };
  gulp.src('./pandoc/**/*.md')
    .pipe(gulpexec('pandoc -f markdown -t latex -s <%= file.path %> -o pandoc/test/<%= file.relative %>.pdf', options))
    .pipe(gulpexec.reporter(reportOptions));
});

除了dest文件具有以下格式外,它的工作原理完美: &#34; filename.md.pdf&#34; (如果源文件是&#34; filename.md&#34;)。 这是因为我使用&lt;%= file.relative%&gt;在exec命令中实际存储源文件的名称(&#34; filename.md&#34;)。

是否可以将dest文件写成:&#34; filename.pdf&#34; ? 我尝试使用&lt;%= file.basename%&gt;而不是&lt;%= file.relative%&gt;但它不起作用。 当然,我可以创建另一个任务并重写所有文件,但我想找到一个更优雅的方式。 有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以创建一个函数来生成所需的文件名,然后通过opt上的gulp-exec参数将其注入:

var gulpexec = require('gulp-exec');
var path = require('path');

gulp.task('pandoc', function() {
  var options = {
    continueOnError: false,
    pipeStdout: false
  };
  var reportOptions = {
    err: true,
    stderr: true,
    stdout: true
  };

  var outDir = './pandoc/test/';

  function execPandoc(outDir, options) {
    options = options || {};

    options._out = function(file) {
      return path.join(outDir, path.basename(file.relative, path.extname(file.relative)));
    };

    // Output an object to pipe into
    return gulpexec('pandoc -f markdown -t latex -s <%= file.path %> -o <%= options._out(file) %>.pdf', options)
  };

  gulp.src('./pandoc/**/*.md')
    .pipe(execPandoc(outDir, options))
    .pipe(gulpexec.reporter(reportOptions));
});