如何让含TypeScript文件的仓库安装到纯JavaScript项目后正常运行
问题原因
该报错本质是纯JS项目没有处理TypeScript源码的能力,你直接暴露了TS源码作为导入入口,同时postinstall阶段编译的方案可靠性极低。
可行解决方案(全部修改都在myRepo侧完成)
1. 调整TypeScript编译配置
在myRepo的tsconfig.json中补充以下配置,提前把TS文件编译为可直接运行的JS文件、同时生成类型声明:
{ "compilerOptions": { "rootDir": "./src", // 替换为你实际的源码存放目录 "outDir": "./dist", // 编译产物统一输出到dist目录 "declaration": true, // 生成对应的.d.ts类型声明文件 "target": "ES5", // 可根据你的兼容性需求调整 "module": "CommonJS" // 也可配置同时输出ESM格式 // 保留原有其他配置即可 } }
2. 废弃postinstall编译方案,提前生成构建产物
不要依赖用户安装时的postinstall钩子执行编译:
- 本地执行
tsc命令生成完整的dist目录 - 把dist目录从myRepo的
.gitignore中移除,提交到git仓库
原因是大量项目会默认禁用依赖安装阶段的脚本执行(npm install --ignore-scripts是行业常用操作),postinstall逻辑本身就不可靠。
3. 配置myRepo的package.json入口和导出规则
在myRepo的package.json中补充以下字段,让JS项目可以正确解析导入路径:
{ "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { ".": "./dist/index.js", // 单条配置支持所有子路径导入,比如myRepo/sum会自动映射到dist/sum.js "./*": "./dist/*.js" }, // 如果你有发布到npm的需求,补充files字段确保dist被包含 "files": [ "dist" ] }
修改完成后把myRepo的改动推送到master分支,在使用侧重新安装myRepo即可解决报错。
内容的提问来源于stack exchange,提问作者Asif khan
相关产品推荐
相关产品推荐

