如何将选项传递给handlebars.precompile?

时间:2014-05-22 07:24:54

标签: handlebars.js

所以我的代码运行正常(我正在使用gulp而不是咕噜咕噜):

var handlebars = require('handlebars'),
    rename = require('gulp-rename'),
    map = require('vinyl-map');

gulp.task('test', function(){
return gulp.src(config.path.template+"/*.handlebars")   
        .pipe(map(function(contents) {
            return handlebars.precompile(contents.toString());
        }))

.pipe(rename({ extname: '.js' }))
.pipe(gulp.dest(config.path.template+"/test"))
});

一切运行完美,.js文件在good文件夹中生成,但是我需要它们在没有-s参数的情况下生成。例如,当我运行handlebars path/to/my/hbs.handlebars -f path/to/my/out/folder.js -s(或--simple)时,生成的文件是相同的。但是我需要这个命令在没有-s参数的情况下运行,我找不到在gulpfile中传递这个参数的方法。我尝试了很多东西,在一个字符串中,在一个Json中,在一个数组中,尝试使用-s falsesimple falseisSimple false(我在手柄代码中找到的东西)。

这些都不起作用,我真的需要将-s参数传递给false。我认为我需要做类似的事情:

[...]
return handlebars.precompile(contents.toString(), options);
[...]

但我无法找到使用这些选项的正确语法或方法。这就是我的问题。

PS:我使用这个而不是gulp-handlebars,这样我就可以使用我想要使用的把手版本,而不是另一个。

修改

handlebars.js代码中搜索,我发现options是一个对象,但由于我不是一个优秀的javascript用户,我无法找到他所填充的内容。

1 个答案:

答案 0 :(得分:0)

在我看来,源中没有这样的转换。 取自命令行工具中使用的precompiler source

      if (opts.simple) {
        output.push(Handlebars.precompile(data, options) + '\n');
      } else if (opts.partial) {
        if (opts.amd && (opts.templates.length == 1 && !fs.statSync(opts.templates[0]).isDirectory())) {
          output.push('return ');
        }
        output.push('Handlebars.partials[\'' + template + '\'] = template(' + Handlebars.precompile(data, options) + ');\n');
      } else {
        if (opts.amd && (opts.templates.length == 1 && !fs.statSync(opts.templates[0]).isDirectory())) {
          output.push('return ');
        }
        output.push('templates[\'' + template + '\'] = template(' + Handlebars.precompile(data, options) + ');\n');
      }

opts是您传入的内容,另一个变量options传递给precompile。装饰由命令行工具添加。 在脚本中有一个第二个块,右边有几行。 您最好将该源复制到您的代码中,或者访问您的gulp脚本中的.cli对象。