Спецификация 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"
}
}
}
]
}