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

TypeScript编译时如何将Handlebar(.hbs)文件导出至dist目录

解决TypeScript编译时同步*.hbs视图文件到dist目录的问题

嘿,这个问题我碰到过好几次了——TypeScript编译器只会处理.ts/.tsx这类源码文件,像.hbs这种模板文件确实不会自动复制到dist目录,导致运行时找不到模板路径。给你几个实用的解决方案,看你项目的工具链情况选就行:

1. 简单脚本配合tsc(适合小型项目)

如果你的项目不需要复杂的构建流程,直接在编译命令后加一个复制文件的脚本就行。在package.json的scripts里配置:

针对Mac/Linux:

"scripts": {
  "build": "tsc && cp -r src/views dist/"
}

针对Windows:

"scripts": {
  "build": "tsc && xcopy src\\views dist\\views /E /I"
}

/E表示复制所有子目录,/I表示如果目标目录不存在就创建它。要是想跨平台兼容,也可以用cross-env配合通用的复制工具,不过下面的方法更省心。

2. 使用copyfiles包(跨平台友好)

copyfiles是专门用来复制文件的npm包,跨平台支持很好,不用写两套脚本。

首先安装依赖:

npm install copyfiles --save-dev

然后在package.json里配置编译命令:

"scripts": {
  "build": "tsc && copyfiles -u 1 src/views/**/*.hbs dist/"
}

这里的-u 1是指去掉源路径的第一层(也就是src/),这样复制后dist目录下就会直接生成views文件夹,和你的源码结构对应,保证路径引用正确。

3. Webpack项目用copy-webpack-plugin

如果你的项目已经用Webpack打包,那直接用copy-webpack-plugin就能在打包时自动同步模板文件。

先安装插件:

npm install copy-webpack-plugin --save-dev

然后在webpack.config.js里添加配置:

const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
  // 你的其他Webpack配置(entry、output等)
  plugins: [
    new CopyPlugin({
      patterns: [
        { from: 'src/views', to: 'views' },
      ],
    }),
  ],
};

这样Webpack在编译时会自动把src/views目录完整复制到你指定的输出目录(一般就是dist)里。

4. 开发环境实时同步

如果是开发阶段需要修改.hbs文件后实时生效,不用每次手动编译复制,可以配合nodemon或者ts-node-dev:

用nodemon的话,新建nodemon.json:

{
  "watch": ["src"],
  "ext": "ts,hbs",
  "exec": "ts-node src/server/myServer.ts",
  "ignore": ["node_modules"],
  "events": {
    "restart": "cp -r src/views dist/"
  }
}

这样每次修改.ts或.hbs文件时,nodemon会重启服务并同步视图文件。

用copyfiles的监听模式:

单独开一个终端运行:

copyfiles -u 1 src/views/**/*.hbs dist/ -w

-w表示监听文件变化,一旦有.hbs文件修改就自动复制。

选个最适合你项目的方法就行,我个人小项目常用copyfiles,Webpack项目就用对应的插件,都挺省心的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:24