如何使用Rollup将Yarn Workspace本地依赖的TypeScript类型打包进SDK
问题核心原因
你遇到的问题本质是类型打包工具默认将monorepo内部的api私有包识别为外部依赖,因此保留了对应的导入语句。只需让类型打包工具将api包的类型纳入内联处理范围,即可实现需求,且不会引入api的业务代码。
推荐解决方案:使用rollup-plugin-dts处理类型打包
这是目前Rollup生态中处理类型内联最稳定的方案,配置方式如下:
- 安装依赖
npm install rollup-plugin-dts --save-dev
- 修改Rollup配置
// sdk/rollup.config.js import dts from 'rollup-plugin-dts'; import esbuild from 'rollup-plugin-esbuild'; // 业务代码打包配置 const jsBundleConfig = { input: 'src/index.ts', output: { file: 'lib/index.js', format: 'esm' }, // 业务代码打包时可将api列为external,TS编译后类型会被擦除,不会残留引用 external: ['api'], plugins: [esbuild()] }; // 类型声明打包配置 const dtsBundleConfig = { input: 'src/index.ts', output: { file: 'lib/index.d.ts', format: 'esm' }, // 注意:此处不要将api列为external,插件会自动内联用到的类型 plugins: [dts()] }; export default [jsBundleConfig, dtsBundleConfig];
- 前置检查项
- 确保
sdk包的devDependencies中已声明对api包的monorepo本地依赖(如"api": "workspace:*") - 确保
api包的package.json中正确配置了types字段,指向自身的类型声明入口
备选方案:使用dts-bundle-generator
如果不想调整Rollup配置,也可以用专门的类型打包工具实现:
- 安装依赖
npm install dts-bundle-generator --save-dev
- 在
sdk的package.json中添加打包脚本
{ "scripts": { "build:dts": "dts-bundle-generator --no-check --out-file lib/index.d.ts src/index.ts" } }
运行脚本后会自动生成已内联所有依赖类型的声明文件,不会残留对api包的引用。
内容的提问来源于stack exchange,提问作者shennan
相关产品推荐
相关产品推荐

