You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

express-handlebars 6.0.1版本报错TypeError: hbs is not a function问题求助

问题根源

express-handlebars v6.0.0及以上版本进行了破坏性API调整,v5及更早版本的默认导出为可直接调用的配置函数,v6+版本默认导出为包含engine、create等方法的对象,直接调用hbs()会触发类型错误。

解决方案

提供两种适配写法,按需选择即可:

写法1:最简适配(改动量最小)

仅修改导入语句即可和原有配置逻辑兼容:

var express = require('express');
// 导入时解构出engine方法并重命名为hbs
var { engine: hbs } = require('express-handlebars')
var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.engine('hbs', hbs({
    layoutsDir: `${__dirname}/views/layouts`,
    extname: `hbs`,
    defaultLayout: 'layout',
    partialsDir: `${__dirname}/views/partials`
}))

写法2:实例化写法(推荐,支持后续扩展)

如果需要对模板引擎做自定义helper、decorator等扩展,使用create方法实例化更便于后续操作:

var express = require('express');
var exphbs = require('express-handlebars')
var app = express();

// 先完成配置生成实例
var hbsInstance = exphbs.create({
    layoutsDir: `${__dirname}/views/layouts`,
    extname: `hbs`,
    defaultLayout: 'layout',
    partialsDir: `${__dirname}/views/partials`
})

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
// 注册引擎时使用实例的engine属性
app.engine('hbs', hbsInstance.engine);

内容的提问来源于stack exchange,提问作者joe shajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:45:06