无dist编译产物的纯TypeScript npm库运行报错如何解决?
错误原因
该报错的核心原因是ts-node的ESM loader默认不会编译node_modules目录下的TypeScript文件,你发布的test包为纯TS源码格式,入口直接指向.ts文件,ts-node加载该依赖时无法识别对应格式,触发格式校验错误。
解决方法
有两种可行的配置方案,任选其一即可:
方案1:修改应用启动命令
直接调整package.json中的start脚本,添加ts-node专属参数,允许处理指定node_modules包内的TS文件:
{ "scripts": { "start": "node --experimental-specifier-resolution=node --loader ts-node/esm src/index.ts --ts-node-esm --allowTsInNodeModules --scope=test" } }
方案2:修改应用tsconfig.json配置
在应用的tsconfig.json中添加ts-node专属配置块,配置后无需修改启动命令:
{ "compilerOptions": { "module": "esnext", "moduleResolution": "node", "esModuleInterop": true, "target": "esnext", "sourceMap": true }, "ts-node": { "esm": true, "allowTsInNodeModules": true, "scope": true, "scopeDir": ["node_modules/test"] } }
额外优化建议
如果要对外发布纯TS源码的npm包,建议在包的package.json中添加types字段,确保用户安装后可以直接获得类型提示:
{ "name": "test", "version": "1.0.0", "type": "module", "main": "src/index.ts", "types": "src/index.ts" }
内容的提问来源于stack exchange,提问作者Vladyslav Mozhvylo
相关产品推荐
相关产品推荐

