0.0.1 • Published 4 years ago

@goldix.org/features v0.0.1

Weekly downloads
2
License
BSD
Repository
-
Last release
4 years ago

Спецификация features.json

//Файл features.json реализует дополнительный слой метаданных, позволяющих описывать назначение модуля и его компонентов.
//Эта метаинформация используется для сборки дистрибутива с только нужным функционалом.
//Файл features.json может лежать в любой папки проекта или в любой папке в библиотеке node_modules.
//Перед сборкой проекта будет произведен поиск всех features.json и сформировано дерево фич,
//которое будет записано в файл features-tree.json в корне проекта.
//Файл features-tree.json будет исползоваться сервисами, чтобы определять какие фичи доступные на уровне исходного кода.
//В рантайме можно будет отключать любую из этих фич программно,
//что должно приводить к скрытию или недоступности соответствующего функционала для конкретного пользователя.

{
  "version": "1.0", //Версия спецификации
  "features": [ //Один файл может описывать несклько фич
    {
      "id": "rest-api",     //Уникальный идентификатор фичи
      "name": "Rest API",   //Название фичи
      "version": "1.0.0",   //Версия фичи
      "description": "Rest API feature.", //Данный текст будет выводится в UI или в консоль в момент настройки фич
      "enabled": true,  //Указывает на то, что фича включена
      "labels": {        //Набор меток по которым можно отфильтровать фичи.
                         //Используется чтобы выбрать фичи в момент их инициализации в приложении либо в момент настройки.
         "app": "hello-world",                 
      },                       
      "tree": { //Описывает дерево фич
        "parent": "http-server",  //"parent" это ссылка на родительскую фичу.
                                  //В случае отключения родительской фичи, все фичи потомки тоже отключаются.
        "childs": {   //Ссылка на фичи-потомки. Поле "childs" закладывается в спецификацию features.json.
                      //Но лучше описывать потомков в их features.json через указание поля "parent".
                      //Например, написав "parent": "http-server", мы тем самым обозончили потомка для "http-server".
                      //Плюсы работы через parent - нам необязательно знать всех потомков, главное что потомки знают кто их родитель в дереве фич.
                      //Таким образом устанавливая новый модуль через npm install, он сам пропишет связь с родителем.
          "analytics-api": "^9.1.2"
        },
        "dependencies": { //Зависимости
          //Ссылки на другие фичи, без которых не будет работать данная фича.
          //Фичи прописанные в "parent", автоматом становятся такой фичей и её не обязательно прописывать в "dependencies".
          "rest-api-jwt": "^1.0.0" //Пример названия фичи и её версии от которой зависит текущая фича
        }
      },
      "services": { //Микросервисы или группы компонентов по назначению.
                    //Например, можно выделить компоненты фронтенда и бекенда в разные группы.
                      
          "node": { //Описание бекенд (nodejs) классов и функций реализующих данную фичу
            "rest-api-server": "./components/restAPIServer.node.js", //Короткая форма описания
            "rest-api-server-dev": {  //Полная форма описания
              "path": "./components/restAPIServer.dev.node.js",
              "labels": {
                "dev": true //Данный компонент имеет дополнительные метки
              },
              "description": "rest-api-server-dev дополнительно реализует функционал по отладке запросов"
            }
          },
          "browser": { //Описание фронтенд классов и функций реализующих данную фичу и способных работать в браузере
            "rest-api-client": "./components/restAPIClient.react.js"
          },
          "js": { //Описание компонетов написаных на чистом JS, которые могут быть использованы и бекендом и фронтендом
            "jwt": "./components/jwt.js"
          }
      }
    }
  ]
}