执行npm link或npm i <repo>后无法解析模块(main与types配置正确)
解决ts-logger模块无法解析的问题
我帮你梳理几个关键排查点和修复步骤,应该能搞定这个模块找不到的问题:
1. 先确认打包产物(dist文件夹)真的存在
你的scripts里把install设为了tsc,这里有个容易踩的坑:
- 本地开发包时,必须先手动执行一次
npm run install(也就是触发tsc编译),生成dist文件夹后再执行npm link,不然链接到测试项目的包根本没有编译后的可执行文件。 - 如果是通过
npm i <repo>安装,你的包的install脚本会在安装时自动执行,但要注意:typescript必须放在dependencies里,不能是devDependencies——默认情况下用户安装你的包时不会下载devDependencies里的依赖,这会导致tsc命令找不到,打包失败,自然就没有dist文件。
2. 核对tsconfig.json的配置细节
你设置了rootDir: ./,这意味着根目录下(除了排除的node_modules和dist)所有.ts文件都会被编译到dist里,但要确认:
- 你的入口文件(比如
index.ts)确实在根目录,这样编译后才会生成dist/index.js和dist/index.d.ts,和package.json里的main、types路径完全对应。 - 如果你的源码是放在
src文件夹里的,那rootDir应该改成./src,同时确保index.ts在src下,这样编译后才会生成正确路径的dist/index.js。
3. 检查package.json的字段准确性
再仔细核对这几个核心字段,建议把容易混淆的install脚本改个名字:
{ "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { "build": "tsc", // 建议改成build,避免和npm自带的install命令混淆 "install": "tsc" // 如果非要保留这个,务必确保typescript在dependencies里 } }
你可以在本地开发时执行npm run build生成dist,推送到GitHub前也要确保dist已经生成(或者在publish脚本里自动触发build)。
4. npm link后的验证小技巧
执行npm link后,去测试项目的node_modules/ts-logger目录下看看:
- 有没有
dist文件夹?里面的index.js和index.d.ts是否存在? - 如果没有,说明你的包在link前没编译,回到第一步手动执行
npm run build后重新link就行。
5. 导入方式的适配检查
如果用require('ts-logger')(CommonJS规范),确保你的tsconfig里module字段是CommonJS(target设为es5的话,module默认就是CommonJS,不用额外配置);如果用import {Logger} from 'ts-logger'(ESModule规范),测试项目的package.json需要加上"type": "module",或者你的包编译时把module设为ESNext/ES6。
按照这些步骤排查下来,应该就能解决模块无法解析的问题了。
内容的提问来源于stack exchange,提问作者Vasya Krenta vkrenta
相关产品推荐
相关产品推荐

