# @docupace/ihub-config 中文文档

规范地址：https://npmcn.com/package/%40docupace/ihub-config/

版本：1\.1\.37
npm 元数据更新时间：2026-11-10T16:56:32.050Z
中文译文更新时间：2026-11-12T16:33:20.672Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40docupace/ihub-config
原文对照：https://npmcn.com/package/%40docupace/ihub-config/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：13.7 MB，130 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：12 个
- 首次发布：2026-02-23T13:07:30.870Z
- 最新版本发布：2026-11-10T16:56:31.650Z
- 近 30 天下载量：2621（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：85（近 12 个月 85 个）

## 中文简介

重用配置 GraphQL 扩展和独立的服务器

## 安装

```sh
npm install @docupace/ihub-config
```

也可以使用：`pnpm add @docupace/ihub-config`、`yarn add @docupace/ihub-config`、`bun add @docupace/ihub-config`

## README

# @ docupace/ ihub- config

重新使用 GraphQL 配置扩展并提取独立服务器 Docupace GraphQL 服务器 .

## 本地运行

```bash
pnpm install
```

要将软件包作为独立的 GraphQL 服务器运行, 请复制 `.env.example` 改为 `.env`,填入所需的值,然后启动 dev 服务器 :

```bash
cp .env.example .env
pnpm start:dev
```

独立服务器监听 `http://localhost:4000/api/graphql`。 。 。 .

## 在另一服务器中用作扩展名

```ts
import { getConfigExtension } from '@docupace/ihub-config';
```

然后将返回的扩展添加到主机服务器的扩展数组 :

```ts
const configExtension = await getConfigExtension();

const serverInfo: ServerConfig = {
  instanceConfig: instanceConfig,
  extensions: [docupaceExtension, configExtension],
  port: 4000,
  createContext,
};
```

以指定域的提供者,解析器等扩展配置扩展 .

```ts
import { getConfigExtension } from '@docupace/ihub-config';
import {
  DashboardPageConfigProvider,
  TablePageConfigProvider,
  AnyPageConfigProvider,
  DetailsPageConfigProvider,
} from './your-host-config-providers.js';
import { configResolvers } from './your-host-config-resolvers.js';

const APPLICATION_PREFERENCE_PREFIX = 'applicationPreference';

const applicationPreferenceResolver = async (keys, context) => {
  const data = await loadApplicationPreferences(keys, context);

  const result: Record<string, string | undefined> = {};
  keys.forEach((key) => (result[key] = undefined));
  data.records.forEach((record: { name: string; value: string }) => {
    result[record.name] = record.value;
  });

  return result;
};

const configExtension = await getConfigExtension({
  configInjectorResolvers: {
    [APPLICATION_PREFERENCE_PREFIX]: applicationPreferenceResolver,
  },
  providers: {
    DashboardPage: DashboardPageConfigProvider,
    TablePage: TablePageConfigProvider,
    AnyPage: AnyPageConfigProvider,
    DetailsPage: DetailsPageConfigProvider,
  },
  resolvers: configResolvers,
});
```

### `configInjectorResolvers`

使用 `configInjectorResolvers` 以解析嵌入到配置中的模板表达式 值,例如:

```ts
$${applicationPreference:timezone}
```

每个键入 `configInjectorResolvers` 是模板前缀,每个值都是 使用此形状的async 解析器函数 :

```ts
type ResolverFunction = (
  keys: string[],
  context: any,
) => Promise<Record<string, any>>;
```

当配置处理遇到时 `$${prefix:key}`,它寻找解决者 那个 `prefix`,批次请求的密钥,并用 已解析值。 这是连接特定主机数据源的正确地点 例如应用程序偏好、租户设置或用户范围值.

### `providers`

使用 `providers` 来注册配置处理器 `__typename`。一个提供者运行 已装入嵌入的配置值和模板表达式之后 解析后,可以重塑或丰富最终的配置对象 已经返回.

```ts
providers: {
  DashboardPage: DashboardPageConfigProvider,
  TablePage: TablePageConfigProvider,
  AnyPage: AnyPageConfigProvider,
  DetailsPage: DetailsPageConfigProvider,
}
```

每个提供者必须是具有 `processConfig` 方法 :

```ts
interface ConfigProvider {
  processConfig(config: any, configService: ConfigService, context: any): any;
}
```

这对于特定页面的后处理有用,例如使碎片正常化, 重写引用, 或为特定页面类型生成额外字段 . 内建供应商被保留,主机供应商被合并到顶上.

### `resolvers`

使用 `resolvers` 以扩展配置扩展所暴露的 GraphQL API . 解析器作为工厂提供,以便接收初始化的 `configService` 实例:

```ts
const configResolvers = {
  query: ({ configService }) => ({
    pages: () => ({
      myCustomPage: async (obj: { path: string }, context: any) => {
        return await configService.getDirectConfig(obj.path, context);
      },
    }),
  }),
  mutation: ({ configService }) => ({
    pages: () => ({
      refreshCustomConfig: async () => {
        await configService.init();
        return true;
      },
    }),
  }),
};
```

主机查询和突变解析器被内置配置所深置 解析器, 这样您就可以添加新字段而不重新声明整个解析器 树。 如果在两地都存在同一个字段,则主机解析器获胜.

如果您想要通过配置存储程序而不是通过 环境变量, `getConfigExtension` 还接受 `configStores` (通常只用于测试).

## 环境变量

配置存储从环境变量中发现, 以前缀分类 作为 `STANDARD` 或者说 `SITE`数字 :

-   `<PREFIX>_CONFIG_LOCAL_PATH`
-   `<PREFIX>_CONFIG_REMOTE_PATH`
-   `<PREFIX>_CONFIG_REMOTE_BRANCH`
-   `<PREFIX>_CONFIG_PRIORITY`
-   `<PREFIX>_CONFIG_NAME`

`<PREFIX>_CONFIG_PRIORITY` 每个配置的商店都需要.

`CONFIG_LOCAL_PATH_ROOT` 当 `<PREFIX>_CONFIG_LOCAL_PATH` 被省略,但商店仍然需要足够的 要发现的配置 .

## 常见问题

### @docupace/ihub-config 是什么？

重用配置 GraphQL 扩展和独立的服务器

### 如何安装 @docupace/ihub-config？

在项目目录运行 npm install @docupace/ihub-config，或使用 pnpm add / yarn add / bun add。

### @docupace/ihub-config 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @docupace/ihub-config 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @docupace/ihub-config 可以商用吗？

@docupace/ihub-config 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @docupace/ihub-config 的下载量有多少？

根据 npm 官方下载统计，@docupace/ihub-config 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,621 次，日均约 87 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @docupace/ihub-config 还在维护吗？

最新版本 1\.1\.37 发布于 2026/11/11（2 天前）；至今共发布 85 个版本，其中过去 12 个月发布了 85 个；首次发布于 2026/02/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

