
关于
集中式配置管理,支持功能标志和动态刷新。
name: azure-appconfiguration-ts description: "集中式配置管理,支持功能标志和动态刷新。" risk: unknown source: community date_added: "2026-02-27"
Azure App Configuration TypeScript SDK
集中式配置管理,支持功能标志和动态刷新。
安装
# 底层 CRUD SDK
npm install @azure/app-configuration @azure/identity
# 高级 Provider(推荐用于应用程序)
npm install @azure/app-configuration-provider @azure/identity
# 功能标志管理
npm install @microsoft/feature-management
环境变量
AZURE_APPCONFIG_ENDPOINT=https://<your-resource>.azconfig.io
# 或者
AZURE_APPCONFIG_CONNECTION_STRING=Endpoint=https://...;Id=...;Secret=...
认证
import { AppConfigurationClient } from "@azure/app-configuration";
import { DefaultAzureCredential } from "@azure/identity";
// DefaultAzureCredential(推荐)
const client = new AppConfigurationClient(
process.env.AZURE_APPCONFIG_ENDPOINT!,
new DefaultAzureCredential()
);
// 连接字符串
const client2 = new AppConfigurationClient(
process.env.AZURE_APPCONFIG_CONNECTION_STRING!
);
CRUD 操作
创建/更新设置
// 添加新设置(如果已存在则失败)
await client.addConfigurationSetting({
key: "app:settings:message",
value: "Hello World",
label: "production",
contentType: "text/plain",
tags: { environment: "prod" },
});
// 设置(创建或更新)
await client.setConfigurationSetting({
key: "app:settings:message",
value: "Updated value",
label: "production",
});
// 使用乐观并发更新
const existing = await client.getConfigurationSetting({ key: "myKey" });
existing.value = "new value";
await client.setConfigurationSetting(existing, { onlyIfUnchanged: true });
读取设置
// 获取单个设置
const setting = await client.getConfigurationSetting({
key: "app:settings:message",
label: "production", // 可选
});
console.log(setting.value);
// 使用过滤器列出
const settings = client.listConfigurationSettings({
keyFilter: "app:*",
labelFilter: "production",
});
for await (const setting of settings) {
console.log(`${setting.key}: ${setting.value}`);
}
删除设置
await client.deleteConfigurationSetting({
key: "app:settings:message",
label: "production",
});
锁定/解锁(只读)
// 锁定
await client.setReadOnly({ key: "myKey", label: "prod" }, true);
// 解锁
await client.setReadOnly({ key: "myKey", label: "prod" }, false);
App Configuration Provider
加载配置
import { load } from "@azure/app-configuration-provider";
import { DefaultAzureCredential } from "@azure/identity";
const appConfig = await load(
process.env.AZURE_APPCONFIG_ENDPOINT!,
new DefaultAzureCredential(),
{
selectors: [
{ keyFilter: "app:*", labelFilter: "production" },
],
trimKeyPrefixes: ["app:"],
}
);
// Map 风格访问
const value = appConfig.get("settings:message");
// 对象风格访问
const config = appConfig.constructConfigurationObject({ separator: ":" });
console.log(config.settings.message);
动态刷新
const appConfig = await load(endpoint, credential, {
selectors: [{ keyFilter: "app:*" }],
refreshOptions: {
enabled: true,
refreshIntervalInMs: 30_000, // 30 秒
},
});
// 触发刷新(非阻塞)
appConfig.refresh();
// 监听刷新事件
const disposer = appConfig.onRefresh(() => {
console.log("Configuration refreshed!");
});
// Express 中间件模式
app.use((req, res, next) => {
appConfig.refresh();
next();
});
Key Vault 引用
const appConfig = await load(endpoint, credential, {
selectors: [{ keyFilter: "app:*" }],
keyVaultOptions: {
credential: new DefaultAzureCredential(),
secretRefreshIntervalInMs: 7200_000, // 2 小时
},
});
// 密钥自动解析
const dbPassword = appConfig.get("database:password");
功能标志
创建功能标志(底层)
import {
featureFlagPrefix,
featureFlagContentType,
FeatureFlagValue,
ConfigurationSetting,
} from "@azure/app-configuration";
const flag: ConfigurationSetting<FeatureFlagValue> = {
key: `${featureFlagPrefix}Beta`,
contentType: featureFlagContentType,
value: {
id: "Beta",
enabled: true,
description: "Beta feature",
conditions: {
clientFilters: [
{
name: "Microsoft.Targeting",
parameters: {
Audience: {
Users: ["user@example.com"],
Groups: [{ Name: "beta-testers", RolloutPercentage: 50 }],
DefaultRolloutPercentage: 0,
},
},
},
],
},
},
};
await client.addConfigurationSetting(flag);
加载和评估功能标志
import { load } from "@azure/app-configuration-provider";
import { FeatureManager, ConfigurationMapFeatureFlagProvider } from "@microsoft/feature-management";
const appConfig = await load(endpoint, credential, {
featureFlagOptions: {
enabled: true,
selectors: [{ keyFilter: "*" }],
refresh: {
enabled: true,
refreshIntervalInMs: 30_000,
},
},
});
const featureManager = new FeatureManager(
new ConfigurationMapFeatureFlagProvider(appConfig)
);
// 评估功能标志
const isBetaEnabled = await featureManager.isEnabled("Beta");
// 带目标上下文的评估
const isEnabledForUser = await featureManager.isEnabled("Beta", {
userId: "user@example.com",
groups: ["beta-testers"],
});
兼容工具
Claude CodeCursor
标签
后端开发
