找不到模块“hbs”,快速车把

Posted

技术标签:

【中文标题】找不到模块“hbs”,快速车把【英文标题】:Cannot find module 'hbs', express-handlebars 【发布时间】:2018-06-21 01:02:10 【问题描述】:

我正在尝试将 express-handlebars 视图引擎用于 express,但我不断收到以下错误:

Error: Cannot find module 'hbs'
    at Function.Module._resolveFilename (module.js:538:15)
    at Function.Module._load (module.js:468:25)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at new View (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\view.js:81:14)
    at Function.render (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\application.js:570:12)
    at ServerResponse.render (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\response.js:1008:7)
    at C:\Users\WilPrim\Desktop\node-app\routes\routes.js:5:6
    at Layer.handle [as handle_request] (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\router\route.js:137:13)

这是我的代码:

const express = require("express");
const bodyParser = require("body-parser");
const hbs = require("express-handlebars");
const router = require("./routes/routes");

//set up express app
var app = express();

app.use(bodyParser.json());

app.set('view engine', 'hbs');
app.set('views', './views');
app.set('view options', layout: './layouts/layout');

app.use(router);

【问题讨论】:

愚蠢的问题,但你有没有运行npm install --save express-handlebars 是的,我有。没用。 对不起,您的意思是命令完成但出现错误,还是您可以验证软件包已安装在node_modules 并列为依赖项并且错误仍然存​​在? 我完成了命令并安装了它,但仍然遇到同样的错误,它找不到模块'hbs' 哦,刚刚注意到问题 【参考方案1】:

根据express-handlebarsdocumentation,您必须手动设置和注册视图引擎:

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

var app = express();
var hbs = exphbs.create( /* config */ );

// Register `hbs.engine` with the Express app.
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');

// ...still have a reference to `hbs`, on which methods like `loadPartials()`
// can be called.

在文档中再往下看一点,看起来您仍然可以通过一些配置使用.hbs 扩展:

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

var app = express();

app.engine('.hbs', exphbs(extname: '.hbs'));
app.set('view engine', '.hbs');

【讨论】:

我遇到了同样的问题,使用底部的第二段代码,我解决了这个问题。但是现在hbs正在views文件夹中寻找main.hbs文件 如果您收到来自monsterpiece 的错误,请使用以下app.engine('.hbs', exphbs(extname: '.hbs', defaultLayout: false)) 可能还需要设置视图路径。 app.set('views', path.join(__dirname, 'views'));【参考方案2】:

使用命令——sudo npm link hbs

【讨论】:

请编辑您的答案并在您的帖子中添加一些解释。该命令的作用是什么,OP为什么要使用它,它是如何解决问题的? 应该是最快的方式 sudonpm 一起使用可能是一个安全问题。它为包中的任何脚本及其正在安装的依赖项提供对机器的根级别访问权限。【参考方案3】:

您可能已将主文件夹命名为“express” 只需更改文件夹的名称,删除“package.json”并尝试 再次“npm install” “npm 安装快递” “npm 安装 hbs”

【讨论】:

【参考方案4】:

在终端上安装这个模块 --> npm i hbs

【讨论】:

【参考方案5】:

尝试 npm install 和 npm audit fix 多次,然后在 ex 之后运行服务器

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于找不到模块“hbs”,快速车把的主要内容,如果未能解决你的问题,请参考以下文章

通过车把部分传递变量

找不到模块“ngx-bootstrap”

Python line_profiler 找不到模块

找不到模块“@angular-devkit/build-angular”

在 本地计算机 无法启动 Terminal Servicse 服务 错误 126 找不到指定模块

带有express和socket.io的节点js-找不到socket.io.js