Рубрики
Uncategorized

Флаги функций в JavaScript с Vanna

Vanna — это простое в использовании функция Flying Biblic. Это легкий и в настоящее время используется в производстве на PBS. В этом руководстве мы пройдем сам простой способ начать. Теги с DevOps, WebDev, JavaScript.

Я вижу красную кнопку

Vanna — это функция с открытым исходным кодом, написанная библиотека и использованная в PBS Отказ Давайте погрузимся в JavaScript клиент . Чтобы создать наш учебник, история.

Мик — это передний разработчик. Дизайн-команда попросила Мика изменить цвет красной кнопки в черный цвет. Управление продуктом не готов пойти на черную кнопку. Дизайн и управление продуктом Спросите нашего Prodigal Engineer, если есть способ хеджирования наших ставок. Они хотят показать экспериментальную черную кнопку для небольшой группы пользователей. Мик улыбается и надевает его оттенки. 😎

Вот краткий пример того, как Vanna позволяет вам сделать это:

// 👇 An instance of vanna client - implementation to come
import features from "app/features"; 

const paintItBlack = features.variation("paint-it-black")

if (paintItBlack) {
  // Render experimental black button
} else {
  // Render red button
}

Это функция, помеченная на самых простых. С функцией Flying вы можете слиться в багажник чаще. Вы можете снизить риск, ограничивая новое, волатильный код в подмножество пользователей. Vanna Допустим, вы сделаете это таким образом, чтобы контролироваться за пределами вашего приложенного кода. Это разблокирует еще одну черту непрерывной доставки.

Желательная цель непрерывной доставки — развертывание развертываний от выпусков. Развертывание — это акт перемещения кода на сервер. Релизы — это акт изготовления кодовых путей, доступных пользователям. Вы можете прочитать больше в Эта статья хакера полдень Отказ Для развязки релизов из развертываний Vanna принимает свои особенности от ответа JSON. Это позволяет нам обновлять доступность функций без развертывания кода.

Создание функций

Давайте погрузимся в форму отклика функций. Ответ выглядит так:

{
  "features": {
    "paint-it-black": {
      "slug": "i-want-to-paint-it-black",
      "enabled": true,
      "targetSegment": ["alpha-tester"]
    }
  }
}

Ответ функции содержит любое количество объектов объектов. В нашем образце Есть одна особенность, «Краска - черная» Отказ Особенность имеет три характеристики:

  • "Слинь" — Это называет особенность. Это полезно для идентификации функции, когда вы даете только значения функций. Мы будем использовать его для переопределения доступности функций в нашем расширенном примере.
  • «Включено» — Этот ключ делает доступную функцию. Подумайте об этом как о главном выключателе. Если это ложь Особенность будет выключена для всех.
  • «Цельмент» — Особенности целевых пользователей. Вы делаете функцию доступной для групп пользователей с помощью этого ключа. Посмотрим, как пользователи идентифицируют как useremment Когда мы создали создание Новый Vannaclient Отказ

Там нет консольного интерфейса для создания этого ответа JSON в данный момент. Прямо сейчас мы напишем JSON вручную и сделали его доступным через CDN. Интерфейс администратора и API для создания этого ответа — это будущее улучшение. Ручная ремесло JSON было наименьшим шагом, который мы могли бы принять к разработке библиотеки Vanna. Принимая этот подход MVP, облегчает нам экспериментировать и итерацию.

Использование Vanna-JS

В нашем простом примере мы взяли наличие доступности клиентской библиотеки. Давайте реализуем это.

Мы настроим useremment основанный на наличии печенья. Смотрите наши Предыдущий пост При настройке файлов cookie для флагов функций.

// app/features.js
import { VannaClient } from "@pbs/vanna";
import Cookies from "js-cookie";

const isAlphaTester = Cookies.get("alpha-tester");

const client = new VannaClient({                                              
  uri: "https://cdn.com/features.json",                    
  userSegment:  isAlphaTester ? "alpha-tester" : "regular",           
  fallbacks: {                                                                
    "paint-it-black": false                                              
  }                                                                          
});                                                                           

Когда вы создаете создание Новый Vannaclient. Вы несете ответственность за:

  • URI — Это местоположение ответа контроля функций JSON.
  • useremment — Это группа пользователя. Vanna Включает функцию для этого пользователя в соответствии с включенным «Цельмент» Отказ
  • Запасныеки — Это устанавливает поведение по умолчанию для флагов функций. Обратите внимание, что отбывание должно быть установлено для каждой функции в ответе JSON.

Теперь мы можем использовать Vanna, чтобы закончить нашу задачу. В нашем первоначальном примере мы создали логию, чтобы разделить наш код с:

const paintItBlack = features.variation("paint-it-black")

Ванна Вариация () Метод принимает функцию «Цельмент» и клиент useremment во внимание. На матче между двумя методом возвращается правда Отказ

С этим руководством вы можете использовать Vanna в качестве библиотеки флакозы функций. Вы можете развертывать развертывание от релизов. Вы можете погрузить программное обеспечение более быстро с более низким риском. Использование Vanna Таким способом for Feature Freams идеально подходит для простых случаев использования. Доступны дополнительные параметры для пользователей энергопотребления, которые нуждаются в дополнительной настройке.

Переопределение вариации

Управление функциями с одним useremment кажется грубым. Что если мы хотим более тонкий контроль? Что, если я хочу включить конкретную особенность, независимо от моего useremment ? Клиент Vanna позволяет переопределить приемлемость вариации. Мы можем продлить наши предыдущие пост Об переключающихся флагах на специфических функциях печенья. Мы позволим Vanna отказаться от функции на основе наличия именованных файлов cookie. Следующие выделенные блоки показывают, как мы можем добавить к нашему предыдущему клиенту Vanna:

// app/features.js
import _ from "lodash";
import { VannaClient, getFeatureVariation } from "@pbs/vanna";
import Cookies from "js-cookie";

function getVariationOverride(featureSlug) {
  const featureKey = `feature:${featureSlug}`;
  const overrideValue = Cookies.get(featureKey);
  if (overrideValue) {
    return overrideValue === "true";
  }
  return undefined;
}

const isAlphaTester = Cookies.get("alpha-tester");

const client = new VannaClient({                                              
  uri: "https://cdn.com/features.json",                    
  userSegment:  isAlphaTester ? "alpha-tester" : "regular",           
  fallbacks: {                                                                
    "paint-it-black": false                                              
  },
  _overrides: {
    getFeatureVariation: (feature, { userSegment }) => {
      const variation = getFeatureVariation(feature, { userSegment });
      const overrideVariation = getVariationOverride(feature.slug);
      return _.isUndefined(overrideVariation) ? variation : overrideVariation;
    }
  }
});                                                                           

С помощью этого дополнительного кода пользователь может отказаться от функций, которые не являются частью их useremment Отказ В нашем примере, если у пользователя нет "Альфа-тестер" cookie, но есть у "Характеристика: я-хочу покрасить - это черный" Cookie, они увидят черную кнопку. Противоположное использование также работает. "Альфа-тестер" можно отказаться от функции, установив названное cookie o "Ложь" Отказ Это переопределение вариации позволяет более эффективно контролировать доступность функции. Мы использовали cookies, чтобы переопределить вариацию, но вы можете использовать локальное хранилище или что-то доступное в JavaScript.

Vanna-JS-Client это проект с открытым исходным кодом. Пожалуйста, проверьте краткий читаемый исходный код. Это легкий способ добавления функций флагов на ваш проект JS.

Оригинал: «https://dev.to/acceldelivery/feature-flags-in-javascript-withvanna-20ng»