如何创建指向src/dist目录的共享TypeScript NPM包?
解决纯TypeScript类型包移至src目录后的模块查找问题
1. 完善package.json核心字段配置
纯类型包仅设置main不足以让TypeScript识别类型,必须补充types字段指定类型入口,同时建议通过files字段明确发布文件范围:
{ "name": "my-package", "version": "1.0.0", "description": "Shared type definitions", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", // 关键:指定类型入口文件 "source": "./src/index.ts", "files": [ // 限定npm包包含的文件,避免遗漏源码 "src/**/*.ts" ], "scripts": { "tsc": "tsc --noEmit", "build": "tsc --emitDeclarationOnly" // 可选:生成d.ts文件用于正式发布 }, "license": "ISC", "devDependencies": { "typescript": "^4.8.4" } }
2. 配置tsconfig.json规范源码结构
在包根目录创建tsconfig.json,确保TypeScript能正确解析src下的文件:
{ "compilerOptions": { "declaration": true, // 开启d.ts文件生成(推荐用于正式发布) "declarationDir": "./dist", // 若生成d.ts,指定输出目录 "rootDir": "./src", // 标记源码根目录 "strict": true, "module": "ESNext", "moduleResolution": "NodeNext", "target": "ESNext" }, "include": ["src/**/*"], "exclude": ["node_modules"] }
如果选择生成d.ts文件,需同步修改package.json的main和types指向dist目录:
{ "main": "./dist/index.d.ts", "types": "./dist/index.d.ts" }
修改后执行npm run build生成dist目录的类型文件。
3. 本地链接测试的修复步骤
- 在类型包根目录先执行
npm install和npm run build(若有build步骤),再重新执行npm link。 - 在消费项目(project A)中,先执行
npm unlink my-package清除旧链接缓存,再重新执行npm link my-package。 - 检查消费项目的
tsconfig.json,确保moduleResolution设置为NodeNext或Node16,与类型包的module配置保持一致,避免模块解析逻辑冲突。
4. 验证类型导出正确性
确保src/index.ts正确导出所有类型:
// src/index.ts export * from './types/restaurant'; export * from './types/menus';
在project A中测试导入:
import type { Restaurant, Menu } from 'my-package';
内容的提问来源于stack exchange,提问作者Stretch0
相关产品推荐
相关产品推荐

