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

TypeScript项目使用hapi-router出现导入语句报错如何解决?

报错根因

你遇到的报错是hapi-router的默认加载逻辑和TypeScript运行规则不兼容导致的:hapi-router会直接用Node.js原生require加载你指定的路由文件,你配置的匹配路径是.ts后缀的TS源文件,Node.js无法直接识别TS文件里的ESModule import语法,就会抛出"Can not use import statement outside a module"错误。

解决方法

场景1:先编译TS为JS再运行(生产环境)

修改插件注册时的路由匹配路径,指向编译后输出目录(通常为dist)的JS文件即可:

await server.register(
    {
        plugin: HapiRouter,
        options: {
            routes: "./dist/api/**/routes.js",
        },
    },
    { routes: { prefix: "/api/v1" } }
);

同时确保你的tsconfig.json中compilerOptions.module配置为CommonJS,保证编译后的JS使用Node.js兼容的模块语法。

场景2:用ts-node直接运行TS代码(开发环境)

  1. 启动项目时添加ts-node注册器,让Node.js可以直接处理TS文件:
node -r ts-node/register src/入口文件.ts
  1. 确保tsconfig.json有以下配置:
{
  "compilerOptions": {
    "module": "CommonJS",
    "esModuleInterop": true
  }
}

如果修改后还是报错,可以把路由文件的export default改为module.exports =,TS原生支持该写法,适配CommonJS加载逻辑。

兜底方案

如果两种方案都不适用,你可以手动实现路由自动加载逻辑:自己写遍历代码读取指定目录的路由文件,导入后手动调用server.route()批量注册,完全自主控制加载逻辑,避免第三方插件的兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:24:03