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

React/TypeScript组件库如何实现子路径导入?

实现组件库的子路径导入配置

我搭了一个基于React、TypeScript和Webpack的组件库,目录结构是这样的:

- src
  - ui-components
      - ComponentA
      - ComponentB
      - index.ts
  - plugins
      - PluginA
      - PluginB
      - index.ts
  - index.ts

各个index.ts的内容:

  • src/index.ts:
export * from './ui-components';
export * from './plugins';
  • src/ui-components/index.ts:
export * from './ComponentA';
export * from './ComponentB';
  • src/plugins/index.ts:
export * from './PluginA';
export * from './PluginB';

当前package.json的相关配置片段:

"main": "dist/index.js",
  "module": "dist/index.js",
  "typings": "dist/index.d.ts",
  "files": [
    "dist/**"
  ],
  "exports": {
    "./ui-components": {
        "import": "./dist/ui-components/index.d.ts"
    },
    "./plugins": {
      "import": "./dist/plugins/index.d.ts"
  }

现在导入组件只能这么写:

import { ComponentA } from 'myLibrary';
// 或者
import { ComponentA } from 'myLibrary/dist/ui-components'

想改成下面这种更简洁的导入方式:

import { ComponentA } from 'myLibrary/ui-components'
import { PluginA } from 'myLibrary/plugins'

解决办法

1. 修正package.json的exports配置

你现在的exports只写了类型文件,没指定对应的JS模块入口,得补全配置,同时覆盖ES模块和CommonJS的入口,还要关联好类型文件:

修改后的exports应该是这样:

"exports": {
  ".": {
    "import": "./dist/index.js",
    "require": "./dist/index.js",
    "types": "./dist/index.d.ts"
  },
  "./ui-components": {
    "import": "./dist/ui-components/index.js",
    "require": "./dist/ui-components/index.js",
    "types": "./dist/ui-components/index.d.ts"
  },
  "./plugins": {
    "import": "./dist/plugins/index.js",
    "require": "./dist/plugins/index.js",
    "types": "./dist/plugins/index.d.ts"
  }
}
  • 补全根路径.的配置,保证主入口正常使用;
  • 每个子路径同时指定JS文件和类型文件,让Node和TypeScript都能正确解析。

2. 让Webpack正确编译子目录

得配置Webpack把src/ui-components和src/plugins分别编译到dist对应的子目录里,保持结构一致。

修改Webpack的entry配置:

module.exports = {
  entry: {
    index: './src/index.ts',
    'ui-components/index': './src/ui-components/index.ts',
    'plugins/index': './src/plugins/index.ts'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist'),
    library: {
      type: 'module' // 如果是纯ES模块库就这么设,要兼容CommonJS的话可以改成umd
    }
  },
  // 其他resolve、module、plugins等配置不变...
};

这样Webpack会把每个入口文件编译到dist对应的子目录下。

3. 调整TypeScript配置

得保证tsconfig.json里的outDir指向dist,并且开了declaration,让TS自动把类型文件生成到对应目录:

{
  "compilerOptions": {
    "outDir": "./dist",
    "declaration": true,
    "declarationDir": "./dist",
    // 其他target、module、jsx等配置按需设置...
  },
  "include": ["src/**/*"]
}

编译之后,dist的ui-components和plugins目录下会同时有.js和.d.ts文件。

4. 验证效果

重新编译组件库,然后在新项目里就能用你想要的导入方式了:

import { ComponentA } from 'myLibrary/ui-components'
import { PluginA } from 'myLibrary/plugins'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:42:46