打字稿不加载车把文件

Moe*_*ius 5 node.js express handlebars.js typescript

我有以下目录结构:

src
|- server
  |- myServer.ts
  |- views
    |- myView.hbs
dist
|- server
  |- myServer.js
Run Code Online (Sandbox Code Playgroud)

请注意,views文件夹中没有文件dist夹(从 typescript 编译的 js 源所在)。这是一个问题,因为当我../views/selectCoin.hbs从 javascript 中请求时,什么也没有。

*.hbs编译打字稿时如何将文件导出到 javascript?

Bru*_*oLM 6

要告诉车把视图在哪里,您可以像这样配置它

app.set('view engine', 'hbs');
app.set('views', path.join(__dirname, '../../src/server/views'));
app.engine('hbs', exphbs({
    defaultLayout: 'index',
    extname: 'hbs',
    layoutsDir: path.join(__dirname, '../../src/server/views/layouts'),
    partialsDir: path.join(__dirname, '../../src/server/views'),
}));
Run Code Online (Sandbox Code Playgroud)

所以它会在src文件夹中寻找视图。


另一种选择是使用ts-node而不是node. 有了它,你不需要编译你的项目,也不需要 dist 文件夹,你可以将它配置为直接从你所在的位置查看:

app.set('view engine', 'hbs');
app.set('views', path.join(__dirname, 'views'));
app.engine('hbs', exphbs({
    defaultLayout: 'index',
    extname: 'hbs',
    layoutsDir: path.join(__dirname, 'views/layouts'),
    partialsDir: path.join(__dirname, 'views'),
}));
Run Code Online (Sandbox Code Playgroud)

如果要将视图复制到 dist 文件夹,您可以: