You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vite构建React库时包含私有内部包的类型定义?

Vite构建React库:内嵌内部包类型到声明文件的解决方案

1. 配置my-react-lib的tsconfig.json

添加以下编译选项,让TypeScript生成声明时自动内嵌依赖类型:

{
  "compilerOptions": {
    "declaration": true,
    "declarationDir": "./dist/types",
    "isolatedModules": false,
    "preserveSymlinks": false,
    "skipLibCheck": true,
    // 映射内部包路径,确保TS能解析到源码类型
    "paths": {
      "@packages/internal": ["../internal/src"]
    }
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

2. 使用rollup-plugin-dts处理声明合并

Vite默认不会合并依赖类型,需要借助这个插件实现内嵌:

安装依赖

npm install rollup-plugin-dts --save-dev

修改vite.config.js

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import dts from 'rollup-plugin-dts';

export default defineConfig({
  plugins: [react()],
  build: {
    lib: {
      entry: 'src/index.ts',
      name: 'MyReactLib',
      formats: ['es', 'umd'],
      fileName: (format) => `my-react-lib.${format}.js`
    },
    rollupOptions: {
      external: ['react', 'react-dom'],
      output: {
        globals: { react: 'React', reactDOM: 'ReactDOM' }
      },
      plugins: [
        dts({
          entry: 'src/index.ts',
          output: { file: 'dist/types/index.d.ts' },
          // 强制内嵌所有依赖类型,忽略外部标记
          respectExternal: false
        })
      ]
    }
  }
});

3. 验证效果

执行构建后,dist/types/index.d.ts会直接包含InternalType的完整定义:

export interface InternalType {
  foo: bar; // 此处bar需替换为实际类型
}

额外注意

  • 确保internal包的tsconfig.json开启了declaration: true,否则TS无法识别其类型
  • monorepo中把internal设为my-react-lib的devDependencies,避免被打包进产物

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:00:26