@ brighte/ platform- core- utils
布莱特平台团队共享内部公用设施包.
这个软件包提供多个存储库中常见的可重复使用的辅助器和公用事业. 它被设计成递增增长——每个模块都是轻量级的,可以独立测试,并且与无关的依赖性隔离. 目前包括契约合同测试公用事业,计划采用更多的模块.
模块
| 模块 | 入境点 | 状态 | 说明 |
|---|---|---|---|
pact | @brighte/platform-core-utils | 准备 | 契约消费者合同测试帮助者 |
pact/config | @brighte/platform-core-utils/config | 准备 | 用于协议测试的虚拟配置工厂 |
pact/publish | @brighte/platform-core-utils/publish | 准备 | 向经纪人发布契约的脚本助手 |
新模块进入
src/<module>/并且从一个专用的子路径导出,如果它们具有不同的依赖性。 见 克劳德·姆德 捐款准则.
安装
npm install --save-dev @brighte/platform-core-utils
@pact-foundation/pact, (中文(简体) ), graphql,以及 @graphql-typed-document-node/core 作为依赖性自动安装.
为可选特性安装对等依赖 :
# For vitest config (createPactVitestConfig)
npm install --save-dev vitest vite-tsconfig-paths
# For publishing pacts (publishPacts)
npm install --save-dev @pact-foundation/pact-node
说明: 发布到 npm
@brighte范围。 确保您的项目.npmrc以正确的认证符号配置.
契约模块
创建提供者
import { createProvider } from '@brighte/platform-core-utils';
export const provider = createProvider({
consumer: 'my-app',
provider: 'api-service',
logLevel: 'info', // optional, defaults to PACT_LOG_LEVEL env var or 'warn'
dir: './generated-pacts', // optional, defaults to './generated-pacts'
});
构建图QL 互动
import { createGraphqlQueryInteraction } from '@brighte/platform-core-utils';
import { MatchersV3 } from '@pact-foundation/pact';
import { someQuery } from './queries.graphql';
const interaction = createGraphqlQueryInteraction({
state: 'user with id 123 exists',
uponReceiving: 'a request for user data',
query: someQuery,
variables: { id: '123' },
responseBody: {
user: MatchersV3.like({ id: '123', name: 'John Doe' }),
},
});
虚拟配置
// pact/setup/config.ts
import tsconfigPaths from 'vite-tsconfig-paths';
import { defineConfig } from 'vitest/config';
import { createPactVitestConfig } from '@brighte/platform-core-utils/config';
export default defineConfig({ ...createPactVitestConfig(), plugins: [tsconfigPaths()] });
出版条约
// pact/setup/publish.pact.ts
import { publishPacts } from '@brighte/platform-core-utils/publish';
await publishPacts();
CI 部署检查
// pact/setup/can-i-deploy.ts
import { canIDeploy } from '@brighte/platform-core-utils';
const environment = process.env['ENVIRONMENT'];
if (!environment) { console.error('ENVIRONMENT is not set'); process.exit(1); }
canIDeploy({ pacticipant: 'my-app', toEnvironment: environment });
// pact/setup/record-deployment.ts
import { recordDeployment } from '@brighte/platform-core-utils';
const environment = process.env['ENVIRONMENT'];
if (!environment) { console.error('ENVIRONMENT is not set'); process.exit(1); }
recordDeployment({ pacticipant: 'my-app', environment });
完整的契约设置指南见 文件/邮编。 。 。 .
发展
npm install # install deps
npm run build # compile CJS + ESM to dist/
npm run lint # eslint
npm test # vitest
npm run clean # remove dist/
版本和发行
此软件包使用 语义版本。每次合并到 npm 时自动发布到 npm main。 。 。 .
- 弹出
package.json版本(例如:.1.0.0→1.1.0(中文(简体) ) - 更新
CHANGELOG.md - 提交并打开 PR 对
main - 一旦合并,
publish.yml运行并发布到 npm
如果该版本在
package.json未更改, 发布步骤会跳过( 没有重出已存在的版本 ) .
出版工作流程
| 工作流程 | 触发 | 目的 |
|---|---|---|
ci.yml | 将/ PR 推到 main | 建置、用意、测试、循环解析检查 |
publish.yml | 合并到 main | 发布稳定释放到 npm |
beta.yml | 手动发送 | 发布 beta 调值 |