1

我编写了一个 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 文件具有以下格式:“filename.md.pdf”(如果源文件是“filename.md”)。那是因为我在 exec 命令中使用了 <%= file.relative %> ,它实际上存储了源文件的名称(“filename.md”)。

是否可以像这样编写 dest 文件:“filename.pdf”?我尝试使用 <%= file.basename %> 而不是 <%= file.relative %> 但它不起作用。当然,我可以创建另一个任务并重写所有文件,但我想找到一种更优雅的方式。任何想法 ?

谢谢

4

1 回答 1

0

您可以创建一个函数来生成所需的文件名并通过opt参数 on注入它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));
});
于 2017-01-16T17:36:44.247 回答