所以我的代码运行正常(我正在使用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 false
,simple false
和isSimple false
(我在手柄代码中找到的东西)。
这些都不起作用,我真的需要将-s参数传递给false。我认为我需要做类似的事情:
[...]
return handlebars.precompile(contents.toString(), options);
[...]
但我无法找到使用这些选项的正确语法或方法。这就是我的问题。
PS:我使用这个而不是gulp-handlebars,这样我就可以使用我想要使用的把手版本,而不是另一个。
修改
在handlebars.js
代码中搜索,我发现options
是一个对象,但由于我不是一个优秀的javascript用户,我无法找到他所填充的内容。
答案 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
对象。