ENbext.dev
DocumentationOutils pour applications

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Indicateurs de fonctionnalités

@bext-stack/framework/flags est un client d'indicateur de fonctionnalité de style Pennant pour les applications PRISM. bext a déjà un moteur d'indicateur Rust derrière /__bext/sdk/flags/evaluate, mais son fichier serveur est configuré et il n'y avait pas de client typé - applications lancées manuellement fetch(). Ce module vous propose deux modes, et ils composent :

  1. Indicateurs locaux définis par le code — définit un indicateur comme un booléen, un prédicat sur le contexte de la demande, ou un déploiement déterministe et collant percentage(). Pur, sans serveur, testable à l'unité - c'est le titre Pennant qui manquait bext.
  2. Relais à distance — pour les clés que vous n'avez pas définies localement, évaluez-les le point de terminaison du SDK de la fonctionnalité Indicateur de fonctionnalité (lorsqu'un fournisseur est configuré).

Quand l'utiliser#

  • Expédiez le code sombre et activez-le pour une fraction des utilisateurs.
  • Lancez une version bêta derrière une liste blanche ou un attribut.
  • Exécutez une expérience A/B/n avec une affectation collante.

Définir et évaluer#

ts
import { defineFlags, percentage, forUsers, forAttribute } from "@bext-stack/framework/flags";

const flags = defineFlags({
  flags: {
    "new-checkout":    percentage(30),                    // sticky 30% rollout
    "beta-banner":     forUsers("u_1", "u_2"),
    "holiday-theme":   forAttribute("country", "FR"),
    "priority-queue":  (ctx) => ctx.attributes?.plan === "enterprise",
  },
  remote: { appId: "my-site" },                           // optional server fallback
  default: false,
});

if (await flags.isEnabled("new-checkout", { userId: user.id })) { /* … */ }

const arm = flags.variant("home-hero", ["control", "b", "c"], { userId: user.id });
Membre Retours
isEnabled(key, ctx?) Promise<boolean> — victoires locales, sinon à distance, sinon par défaut
isEnabledSync(key, ctx?) boolean — local uniquement (clés à distance → par défaut)
variant(experiment, variants, ctx?) un bras collant pour le sujet
all(ctx?) { flag: boolean } pour chaque drapeau local - amorcez une interface utilisateur
defined les noms des drapeaux locaux

Aides aux règles : percentage(pct) (déterministe, salé par la touche indicateur afin que deux indicateurs à 50 % n'activent pas la moitié identique), forUsers(...ids), forAttribute(key, value), ou tout autre (ctx) => boolean.

Déterministe et collant#

Les déploiements en pourcentage et l'attribution de variantes hachent le sujet ( userId → sessionId → aucun) avec la clé flag/experiment, donc :

  • le même utilisateur obtient toujours la même réponse (pas de bascule entre les requêtes),
  • un utilisateur sans identifiant ne peut pas être regroupé de manière permanente, donc un indicateur percentage reste hors pour eux (fermé sur panne), et
  • deux drapeaux indépendants au même pourcentage ne permettent pas la même cohorte.
Conseil

Préférez userId dans le contexte pour les utilisateurs connectés, et un sessionId stable (par exemple à partir d'un séance signée ) pour les utilisateurs anonymes - qui maintient un déploiement persistant lors des demandes d'un visiteur.

Relation avec la fonctionnalité Indicateur de fonctionnalité#

La fonctionnalité Rust Indicateur de fonctionnalité est le moteur configuré côté serveur par fichier/fournisseur (alimente également l'expérience comprend ). Ce module est le client in-code TypeScript : définissez des indicateurs à côté du code qu'ils contrôlent, évaluez-les sans aller-retour et accédez au moteur uniquement pour les clés que vous laissez aux opérations.

Essayez-le#

Le démo des drapeaux de fonctionnalités en direct vous permet de saisir un identifiant utilisateur et de voir sur quels indicateurs sont évalués - déterministes et collants, de sorte que le même nom se résout toujours de la même manière. Source dans sites/demo/src/app/examples/feature-flags/page.tsx.

Voir aussi#

Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.