Handlebars.js 组装/把手:运行外部js文件中定义的自定义函数
假设我有这个javascript文件 src/js/functions.jsHandlebars.js 组装/把手:运行外部js文件中定义的自定义函数,handlebars.js,assemble,Handlebars.js,Assemble,假设我有这个javascript文件 src/js/functions.js (function() { crc32 = function(str, crc ) { ... }; })(); <script type="text/javascript" charset="utf-8"> var crc_checksum = {{checksum solution}}; </script> Handlebars.registerH
(function() {
crc32 = function(str, crc ) {
...
};
})();
<script type="text/javascript" charset="utf-8">
var crc_checksum = {{checksum solution}};
</script>
Handlebars.registerHelper('checksum', function(value){
this.checksum = return value;
});
(function(exports) {
exports.crc32 = function (str, crc) { ... };
})(window || module.exports);
var crc32 = require('./src/js/functions').crc32;
Handlebars.registerHelper('checksum', function (value) {
return crc32(value);
});
此文件是静态网站的一部分,我想在模板中使用crc32(),如下所示:
指数.hbs
(function() {
crc32 = function(str, crc ) {
...
};
})();
<script type="text/javascript" charset="utf-8">
var crc_checksum = {{checksum solution}};
</script>
Handlebars.registerHelper('checksum', function(value){
this.checksum = return value;
});
(function(exports) {
exports.crc32 = function (str, crc) { ... };
})(window || module.exports);
var crc32 = require('./src/js/functions').crc32;
Handlebars.registerHelper('checksum', function (value) {
return crc32(value);
});
我不想将crc32代码复制粘贴到帮助程序中(因为这会复制代码)。有没有办法将外部JS文件加载到助手的命名空间中?您可以以“node.JS”的方式构建
crc32
文件,并在站点中使用它。还有其他方法可以使crc32
对象在节点和浏览器上都可用。然后,您可以在助手文件中要求它
src/js/functions.js
(function() {
crc32 = function(str, crc ) {
...
};
})();
<script type="text/javascript" charset="utf-8">
var crc_checksum = {{checksum solution}};
</script>
Handlebars.registerHelper('checksum', function(value){
this.checksum = return value;
});
(function(exports) {
exports.crc32 = function (str, crc) { ... };
})(window || module.exports);
var crc32 = require('./src/js/functions').crc32;
Handlebars.registerHelper('checksum', function (value) {
return crc32(value);
});
helpers.js
(function() {
crc32 = function(str, crc ) {
...
};
})();
<script type="text/javascript" charset="utf-8">
var crc_checksum = {{checksum solution}};
</script>
Handlebars.registerHelper('checksum', function(value){
this.checksum = return value;
});
(function(exports) {
exports.crc32 = function (str, crc) { ... };
})(window || module.exports);
var crc32 = require('./src/js/functions').crc32;
Handlebars.registerHelper('checksum', function (value) {
return crc32(value);
});
当然,在创建帮助程序时,只需遵循与任何其他节点库相同的模块模式即可
将助手包装在模块中。导出。注册函数:
module.exports.register = function (Handlebars, options, params) {
Handlebars.registerHelper('checksum', function(src) {
return require('your-checksum-lib')(src);
});
};
然后确保告诉Assembly文件的位置:
assemble: {
options: {
helpers: ['path/to/checksum.js']
}
}
或者。。。如果助手实际上是npm模块本身,则可以将其添加到package.json中的devDependencies
和关键字
,Assembly将自动拾取它。e、 g:
{
"name": "foo",
"devDependencies": {
"handlebars-helper-checksum": "~0.1.0",
},
"keywords": [
"handlebars-helper-checksum"
]
}
但是,您也可以在repo上对该助手进行请求或pr,我们可以将其添加到库中 那正是我想要的,谢谢。我没有使用browserify(可能是另一个依赖项),而是在节点和浏览器之间共享代码。谢谢Jon。由于该模块不是npm模块,我最终使用了require和js文件的相对路径,并添加了一些代码,使其可用于browser和node.js。通过options.helpers告诉assemble有什么好处吗?@PhilippKeller如果在/src/helpers/
这样的文件夹中有多个helper文件,您可以告诉assemble通过options.helpers
加载它们。在这些帮助程序中,您可以对其他模块执行require
<代码>汇编:{options:{helpers:['./src/helpers/***.js']}
是的,正如@doowb所指出的,您可以使用minimatch/glob模式一次加载所有的助手。下面是一个示例项目,演示了我们所描述的内容: