@docupace/ihub-config

中文文档
1.1.37发布于 2026/11/11ISCTypeScriptES Module近 30 天下载 2621

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

中文使用文档
文档目录6 节
  1. 本地运行
  2. 在另一服务器中用作扩展名
  3. configInjectorResolvers
  4. providers
  5. resolvers
  6. 环境变量

@ docupace/ ihub- config

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

本地运行

pnpm install

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

cp .env.example .env
pnpm start:dev

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

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

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

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

const configExtension = await getConfigExtension();

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

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

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 以解析嵌入到配置中的模板表达式 值,例如:

$${applicationPreference:timezone}

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

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

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

providers

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

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

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

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

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

resolvers

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

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 共发布 85 个版本,首次发布于 2026/02/23;过去 12 个月发布了 85 个版本。

版本发布日期距今
1.1.37latest2026/11/112 天前
1.1.38-alpha.02026/11/103 天前
1.1.31-rel32.0rel322026/11/094 天前
1.1.31-patch.1patch2026/11/094 天前
1.1.362026/10/2915 天前
1.1.352026/10/2816 天前

其他发布通道:schwab → 1.1.18-schwab.0,edit → 1.1.27-edit.0,sync → 1.1.27-sync.0,admin → 1.1.30-admin.0,patch → 1.1.31-patch.1,rel32 → 1.1.31-rel32.0。

关于 @docupace/ihub-config 的常见问题

@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 和提交记录判断。