如何在Yarn包构建时生成dist根目录的index.d.ts类型声明文件?
问题原因
- 核心原因是TypeScript编译器(tsc)默认仅会为每个输入的
.ts/.tsx源文件生成对应的.d.ts声明文件,你没有在src根目录创建入口文件index.ts(或index.tsx),自然不会生成对应到dist根目录的index.d.ts文件。
解决步骤
步骤1:创建src入口文件
在src根目录新建index.ts(如果要导出React组件也可以用index.tsx),在文件中统一导出所有你需要对外暴露的内容,示例:
// src/index.ts // 导出组件 export { default as Plug } from './components/app/Plug/Plug'; export { default as OtherComponent } from './components/xxx/OtherComponent'; // 导出工具函数等 export * from './utils/common';
注意:必须保证文件内存在export相关语句,否则ts会将其识别为全局脚本,不会生成对应声明文件。如果暂时没有要导出的内容,可先写export {}占位
步骤2:验证配置合理性
你当前的tsconfig配置已经开启了"declaration": true,outDir也配置为dist,无需额外调整tsconfig参数。如果执行完步骤1后重新build还是没有生成index.d.ts,可检查以下两点:
- 确认
src/index.ts没有被exclude规则过滤:你当前的exclude规则仅排除node_modules和测试文件,不会拦截入口文件,正常不会有问题 - 确认build脚本执行时没有报错:如果tsc编译阶段报错,会中断声明文件生成
可选:生成单文件合并的声明文件
如果你需要把所有分散的.d.ts声明全部合并到根目录的单个index.d.ts中,而非保留目录结构,可以使用dts-bundle-generator工具:
- 安装依赖:
yarn add -D dts-bundle-generator - 修改package.json的build脚本,在tsc执行完成后新增打包命令:
"scripts": { "build": "yarn run clean && tsc --project tsconfig.json && tscpaths -p tsconfig.json -s ./src -o ./dist && dts-bundle-generator --out-file dist/index.d.ts src/index.ts" }
内容的提问来源于stack exchange,提问作者Shadowman
相关产品推荐
相关产品推荐

