库是否应该以TypeScript文件形式发布?发布为.ts而非.js是否符合最佳实践?
结论
直接发布TypeScript源文件到npm不属于Node.js生态的行业常规,也不符合通用最佳实践。
通用发布规范说明
目前主流Node.js库的标准发布格式是:
- 提前编译为兼容范围最广的原生JavaScript文件作为执行入口
- 可选附带
.d.ts类型声明文件为TS项目提供类型支持
这么做的核心价值有两点:
- 全场景兼容:无论使用者是纯JS项目还是TS项目,不需要额外配置就能直接引入使用,不会强制要求用户的构建工具处理
node_modules内的第三方源码 - 规避配置冲突:不同项目的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
相关产品推荐
相关产品推荐

