@ featureflip/js (英语)
服务器侧 JavaScript/ TypeScript SDK 用于 特性flip - 评估当地地标,高度接近零.
安装
npm install @featureflip/js
快速启动
import { FeatureflipClient, createNodePlatform } from '@featureflip/js';
const client = FeatureflipClient.get(
{ sdkKey: 'your-sdk-key', baseUrl: 'https://eval.featureflip.io' },
createNodePlatform(),
);
await client.waitForInitialization();
const enabled = client.boolVariation('my-feature', { user_id: '123' }, false);
if (enabled) {
console.log('Feature is enabled!');
}
await client.close();
单通由建筑.
FeatureflipClient.get()只有这样才能得到客户 通话get()不止一次使用同一种 SDK 键回放手柄指向一个共享的基础客户端——工厂被重新计算,所以关闭一个手柄只在最后一个手柄关闭时关闭共享核心. 这使得SDK能够安全地从每个请求处理器和DI容器中调用而不会泄露SSE连接.
配置
const client = FeatureflipClient.get(
{
sdkKey: 'your-sdk-key',
baseUrl: 'https://eval.featureflip.io', // Evaluation API URL
streaming: true, // Use SSE for real-time updates (default)
pollInterval: 30000, // Polling interval in ms if streaming=false
flushInterval: 30000, // Event flush interval in ms
flushBatchSize: 100, // Events per batch
initTimeout: 10000, // Max ms to wait for initialization
maxStreamRetries: 5, // SSE retries before falling back to polling
},
createNodePlatform(),
);
评价
const context = { user_id: '123', email: '[email protected]' };
// Boolean flag
const enabled = client.boolVariation('feature-key', context, false);
// String flag
const tier = client.stringVariation('pricing-tier', context, 'free');
// Number flag
const limit = client.numberVariation('rate-limit', context, 100);
// JSON flag
const config = client.jsonVariation('ui-config', context, { theme: 'light' });
详细评价
const detail = client.variationDetail('feature-key', { user_id: '123' }, false);
console.log(detail.value); // The evaluated value
console.log(detail.reason); // "RuleMatch", "Fallthrough", "FlagDisabled", etc.
console.log(detail.ruleId); // Rule ID if reason is "RuleMatch"
事件跟踪
// Track custom events
client.track('checkout-completed', { user_id: '123' }, { total: 99.99 });
// Record an identify event for analytics (does not affect flag evaluation)
client.identify({ user_id: '123', email: '[email protected]', plan: 'pro' });
// Force flush pending events
await client.flush();
特性flip计算每个事件名称,每个环境. 您通过的元数据会随事件一同传输,但不会被存储,事件计数也不会被浮出应用或API.
测试
使用 forTesting() 创建具有预定旗帜值的客户端 -- -- 没有网络呼叫.
const client = FeatureflipClient.forTesting({
'my-feature': true,
'pricing-tier': 'pro',
});
client.boolVariation('my-feature', {}, false); // true
client.stringVariation('pricing-tier', {}, 'free'); // 'pro'
client.boolVariation('unknown', {}, false); // false (default)
特征
- 地方评价 - 初始化后近零纬度
- 实时更新 - SSE 自动倒计时
- 事件跟踪 - 自动批量和背景冲洗
- 测试支持 - 说吧
forTesting()用于确定性单位测试的工厂 - 类型脚本 - 包括全部类型定义
所需资源
- 节点.js 18+
许可证
阿帕奇 - 2.0