You need to enable JavaScript to run this app. 库是否应该以TypeScript文件形式发布?发布为.ts而非.js是否符合最佳实践?
优惠活动
大模型
产品
解决方案
定价
更多

库是否应该以TypeScript文件形式发布?发布为.ts而非.js是否符合最佳实践?

结论

直接发布TypeScript源文件到npm不属于Node.js生态的行业常规,也不符合通用最佳实践。

通用发布规范说明

目前主流Node.js库的标准发布格式是:

  • 提前编译为兼容范围最广的原生JavaScript文件作为执行入口
  • 可选附带.d.ts类型声明文件为TS项目提供类型支持

这么做的核心价值有两点:

  1. 全场景兼容:无论使用者是纯JS项目还是TS项目,不需要额外配置就能直接引入使用,不会强制要求用户的构建工具处理node_modules内的第三方源码
  2. 规避配置冲突:不同项目的TypeScript配置(比如目标ES版本、严格校验规则、语法特性支持)差异极大,让用户侧编译第三方库的TS源码很容易出现编译失败、逻辑不符合预期的问题
当前问题的根因

你用到的pgeon属于个人小型项目,作者没有遵循标准的npm包发布流程,直接推送了TS源码到npm仓库,才会导致默认配置下构建报错:

ERROR in ./node_modules/pgeon/postgres-client.ts
Module build failed (from ./node_modules/ts-loader/index.js):
Error: TypeScript emitted no output for /home/dinika/src/expenses-server-node/node_modules/pgeon/postgres-client.ts. By default, ts-loader will not compile .ts files in node_modules.
You should not need to recompile .ts files there, but if you really want to, use the allowTsInNodeModules option.
可选解决方案
  • 你当前配置allowTsInNodeModules参数的方案是可行的,如果想要降低对其他依赖的影响,也可以单独为ts-loader配置只编译pgeon这一个包的TS文件,不需要全局放开对所有node_modules内TS文件的编译权限
  • 如果后续遇到配置兼容问题,也可以替换为社区更成熟的Postgres客户端依赖,比如pg、pg-promise等,这些都遵循标准发布规范,不需要额外配置就能使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:15:04