smddds v0.1.1
Дизайн-система «Умной цифры»
В этом репозитории будет создана и настроена дизайн-система «Умной цифры».
Дизайн система построена с помощью библиотеки TSDX (https://www.npmjs.com/package/tsdx). Базовая конфигурация была подстроена под нужны разработки.
Команды
npm run start- работает для папки src, необходимо иметь файл index.tsx, в котором будет находится экспорт всех библиотечных компонентов. Необходимо для разработки.npm run build- сборка билда в папке build.npm run test- запуск тестов, результат выполнения будет записан в файл.jest-test-results.json, который необходим для storybook.npm run test:env:setup- запустить тестовое окружениеnpm run test:env:teardown- удалить тестовое окружениеnpm run storybook- старт storybook (сначала нужно запуститьnpm run test, чтобы создался файл с результатами теста).npm run storybook:build- билд сборка storybook.npm run codegen- генерация новых компонентов
Разрабатывать компоненты можно двумя способами:
- Разработатывать их c помощью песочницы (
/example), а затем писать для компонентаstory, которое отобразится вstorybook. Для это необходимо сделать билд (npm run build), так как в песочницу компоненты вставляются из папки/dist-import {Component} from '../dist';. Песочница будет перерисовывать компоненты, если меняется компонент в папке/src. Для этого необходимо в корневой папке запустить командуnpm run start.
Для того, чтобы запустить саму песочницу:
cd example
npm i
npm start- Разрабатывать компоненты сразу вместе с
storybook. Для этого нужна командаnpm run storybook.
Создание новых компонентов
Создавать новые компоненты рекомендуется с помощью утилиты кодогенерации. Для запуска утилиты необходимо выполнить команду:
npm run codegenС помощью данной утилиты можно создавать следующие сущности:
- Публичные компоненты
- Дочерние компоненты
Дочерние компоненты можно создавать на неограниченную вложенность. Например вы
хотите создать компонент
src/components/atoms/Foo/components/Bar/components/Baz. Для этого в имени
родительского компонента нужно указать Foo/Bar а в имени дочернего - Baz.
Версионирование библиотеки
Версионирование библиотеки происходит автоматически согласно правилам
семантического версионирования. В рамках задачи необходиомо иметь как минимум
один коммит с тегом (feat, fix и тд). Если задача имеет "Breaking changes",
то в соответствующем поле необходимо проставить Y. Если делать коммит через
консоль, настроенные git hook`и выведут диалог, в котором можно будет выбрать
необходимый тег. Если делать коммит через IDE, то можно скачать плагины, которые
реализуют тот же механизм. Например для Webstorm -
https://plugins.jetbrains.com/plugin/9861-git-commit-template/versions.
Публикация NPM
Для публикации необходимо:
- В терминале необходимо залогинится в nexus с помощью команды:
npm adduser --registry=https://nx.sm-digit.ru/repository/npm-smd-releases/- Ввести логин, пароль, email (или сделать файл
.npmrc, где прописать_authиemail) - Команда
npm publish
Инсталяция библиотеки
Создать в корне проекта файл .npmrc.
В нем прописать:
registry=https://nx.sm-digit.ru/repository/npm-all/
_auth=TOKEN
email=your_emailКоманда для создания "TOKEN" - $ echo -n 'username:password' | openssl base64,
где username - логин типа i.ivanov, password - ваш стандартный пароль.
После этого npm i smart-digit-design-system.
Внимание! Если вы никогда до этого не ходили в nexus, то нужно получить доступ у девопсов.
Конфигурации
Качество кода контролируется с помощью ESlint, prettier, husky и
lint-staged.
Тесты
Для запуска тестов на локальной машине должен быть установлен docker.
Тесты запускаются с использованием тестового окружения, которое разворачивается в docker-контейнерах:
- browserless/chrome - Браузер Chrome, необходим для правильного кросплатформенного скриншот-тестирования.
- nginx - Приложение с тестовыми кейсами. К данному приложению будет обращаться браузер при выполнении тестов.
Запустить тесты можно командой:
npm run testВ таком случае, тестовое окружение будет автоматически:
- Запущено перед выполнением тестов
- Остановлено и удалено после выполнения тестов
Так же, для отладочных целей, тестовое окружение можно запускать/останавливать отдельно от тестов:
- Запуск окружения:
После запуска, тестовое приложение будет доступно по адресу:npm run test:env:setuphttp://localhost:9338 - Остановка и удаление окружения:
npm run test:env:setup
В случае, если тестовое окружение уже запущено "вручную", то тесты можно запускать минуя автоматические этапы запуска/остановки окружения:
npm run test -- --no-envRollup
TSDX использует Rollup v1.x в качестве сборщика. См Optimizations.
TypeScript
.eslintrc.js и tsconfig.json необходимы для настройки линтера и typescript.
Оптимизация сборки
Разработчиками TSDX предусмотрены возможности кастомизации и оптимизации сборки.
Нужно изучить tsdx
optimizations docs. Можно
также использовать invariant и
warning.
Module
Поддерживаются CJS, ESModules и UMD.
Соответствующие пути настраиваются в package.json и dist/index.js.
Деплой песочницы (документация от разработчиков TSDX)
Песочница построена на Parcel, так что можно сделать
сборку, если нужно. Гайд для ручной сборки с Netlify CLI
(npm i -g netlify-cli):
cd example # переход в папку с песочницей
npm run build # билд песочницы
netlify deploy # деплойВ качестве альтернативы, если уже есть git-репозиторий, можно настроить
непрерывное развертывание с помощью Netlify netlify init.
Именнованные экспорты (рекомендация от разработчиков TSDX)
Используйте только именованные экспорты. Единственным исключением является то, что инструмент требует экспорта по умолчанию (например, React.lazy(), Gatsby и Next.js).
Важные замечания и список доработок
- Для документации в storybook на данный момент (версия 5.3.12) функция
<Props of={Button} />не работает с HOC. Поэтому, если ваш компонент обернут вwithStyle(style)(Component), то необходимо в файле со сториComponent.stories.mdxсделатьimport Component, { Component as PureComponent} from './Component'и вPropsпробрасывать именноPureComponent-<Props of={PureComponent} />.
2) Если в props компонента указать кастомный объект (интерфейс), который
импортируется через абсолютный путь, то storybook при генерации документации
укажет в соответствующем поле description - any. Если же импорт сделать
через относительный путь, то в description будет указано корректное
описание.