Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何预编译gulp Handlebar助手?_Javascript_Gulp_Handlebars.js_Precompile - Fatal编程技术网

Javascript 如何预编译gulp Handlebar助手?

Javascript 如何预编译gulp Handlebar助手?,javascript,gulp,handlebars.js,precompile,Javascript,Gulp,Handlebars.js,Precompile,我正在使用gulp Handlebar将我的模板预编译到JS中,但在让自定义Handlebar助手也预编译时遇到了困难。有人知道是否有任何支持/方法可以预编译自定义助手方法吗?我注意到gulp Handlebar可以使用特定的Handlebar库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些助手,并将其输入到Handlebar调用中,事情就可以在本地运行了 // helpers.js var handlebars = require('handlebars'); handle

我正在使用gulp Handlebar将我的模板预编译到JS中,但在让自定义Handlebar助手也预编译时遇到了困难。有人知道是否有任何支持/方法可以预编译自定义助手方法吗?

我注意到gulp Handlebar可以使用特定的Handlebar库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些助手,并将其输入到Handlebar调用中,事情就可以在本地运行了

// helpers.js
var handlebars  = require('handlebars');

handlebars.registerHelper('upper', function(str){
   return str.toUpperCase();
});

module.exports = handlebars;
然后在gulpfile中,类似这样的东西:

var handlebars = require('./src/js/helpers.js');

gulp.task('handlebars', function(){
  gulp.src('src/html/*.html')
      .pipe(gulp_handlebars({handlebars: handlebars})) // override library here
});

我注意到gulp Handlebar可以使用特定的Handlebar库,基本上覆盖了它的默认值。因此,通过创建我自己的模块并注册一些助手,并将其输入到Handlebar调用中,事情就可以在本地运行了

// helpers.js
var handlebars  = require('handlebars');

handlebars.registerHelper('upper', function(str){
   return str.toUpperCase();
});

module.exports = handlebars;
然后在gulpfile中,类似这样的东西:

var handlebars = require('./src/js/helpers.js');

gulp.task('handlebars', function(){
  gulp.src('src/html/*.html')
      .pipe(gulp_handlebars({handlebars: handlebars})) // override library here
});

如果您使用的是Browserify和watchify,并且需要输出为commonjs样式的模块,gulp defineModule将在编译的模板文件中使用require'handlebar'。 这将否定您传递到gulp Handlebar自定义库选项(见上文)中的任何注册助手。下面是我们不想要的输出文件的示例:

// template.js
var Handlebars = require("handlebars");
module.exports = Handlebars.template({"compiler":[7,">= 4.0.0"]...
1:要解决此问题,请创建一个helpers.js文件,该文件需要Handlebar库,添加helpers,然后导出库。使用gulp defineModule的require选项与以下助手一起进入把手库:

.pipe(defineModule('node', {
        require: {
          Handlebars: '../helpers'
        }
      })
    )
这将产生:

// template.js
var Handlebars = require("../helpers");
module.exports = Handlebars.template({...
请注意,相对路径将来自outputfile,请注意prod中的文件路径可能会更改

2:另一种方法是使用gulp wrap来准确地定义您想要的模块。比如:

.pipe(wrap('module.exports = function(Handlebars) {return Handlebars.template(<%= contents %>) }'))

如果您使用的是Browserify和watchify,并且需要输出为commonjs样式的模块,gulp defineModule将在编译的模板文件中使用require'handlebar'。 这将否定您传递到gulp Handlebar自定义库选项(见上文)中的任何注册助手。下面是我们不想要的输出文件的示例:

// template.js
var Handlebars = require("handlebars");
module.exports = Handlebars.template({"compiler":[7,">= 4.0.0"]...
1:要解决此问题,请创建一个helpers.js文件,该文件需要Handlebar库,添加helpers,然后导出库。使用gulp defineModule的require选项与以下助手一起进入把手库:

.pipe(defineModule('node', {
        require: {
          Handlebars: '../helpers'
        }
      })
    )
这将产生:

// template.js
var Handlebars = require("../helpers");
module.exports = Handlebars.template({...
请注意,相对路径将来自outputfile,请注意prod中的文件路径可能会更改

2:另一种方法是使用gulp wrap来准确地定义您想要的模块。比如:

.pipe(wrap('module.exports = function(Handlebars) {return Handlebars.template(<%= contents %>) }'))

是的。在prod环境中,有一些事情需要更改,例如通过helpers.js文件进行复制,但确实有效。感谢您的帮助!我使用的是一套不同的模块,甚至不需要重写库——只需要require操作本身。另外:你应该把自己的答案标记为正确,按照Stackoverflow的标准,这是很酷的……A然后停止工作;我只能猜测这可能是由于某些节点自动更新+吞咽行为不当所致。在prod环境中,有一些事情需要更改,例如通过helpers.js文件进行复制,但确实有效。感谢您的帮助!我使用的是一套不同的模块,甚至不需要重写库——只需要require操作本身。另外:你应该把自己的答案标记为正确,按照Stackoverflow的标准,这是很酷的……A然后停止工作;只能猜测这可能是由于某些节点自动更新+吞咽行为不当所致