Это монорепозиторий, в котором включены yarn workspaces, поэтому каждая директория в ./packages/* представляет из себя отдельный пакет.
Все зависимости устанавливаются в общую папку node_modules (в корневой директории), а внутренние пакеты линкуются между собой.
Сейчас репозиторий содержит 2 пакета:
@csssr/core-design— основной пакет, библиотека с переиспользуемыми React-компонентами;@csssr/core-scripts— cli-утилита для развертывания голого проекта from scratch из файлов-шаблонов и других полезных комманд, которые могут пригодиться пользователю библиотеки;
Пакеты публикуются в npm.
Запустить npm-cкрипт $ yarn start:storybook в директирии ./packages/core-design;
Эту библиотеку подключают в проект (с React-ом), и импортируют из неё компоненты.
Стоит обратить внимание, что в поле main указан файл lib/index.js. Следовательно, при импорте библиотеки этот файл считается входной точкой.
В package.json также можно увидеть все необходимые для сборки npm-скрипты.
Ожидается, что у проекта, где будет использоваться библиотека, уже установлены следующие зависимости:
Эти зависимости прописаны в peerDependencies в package.json файле пакета @csssr/core-design. Использование библиотеки @csssr/core-design без этих пакетов невозможно.
Также стоит отметить, что эти зависимости есть в devDependencies — сейчас это нужно для корректной работы системы типов, в будущем это будет нужно для unit-тестов.
При вызове npm-скрипта build сначала производится очистка директории packages/core-design/lib, куда в дальнейшем попадут артифакты сборки.
Далее запускается 3 параллельных процесса:
- Производится транспиляция babel-ем, который, используя конфигурацию из файла
packages/core-design/babel.config.js, транспилирует.tsxи.tsфайлы и складывает результат в директориюpackages/core-design/lib; - Утилита
tsc(транспайлер TypeScript-a) складывает в ту же директорию файлы-декларации типов; - Утилита
cpxкопирует в ту же конечную директорию файлы картинок и шрифтов (работает по glob-паттерну);
Производится аналогично сборке для продакшн, только все параллельные процессы запускаются в watch режиме.
Представляет из себя простую cli-утилиту, написанную с использованием yargs.
При установке глобально (npm install -g @csssr/core-scripts) пользователю устанавливается cli-утилита, которую можно вызвать так:
$ core-design --help
Нет как таковой, т.к. утилита пишется на JS-е, без использования особого (современного) синтаксиса, нет транспиляции кода.
Для локальной разработки требуется иметь возможность часто запускать cli-утилиту после внесения правок в код. Для этого удобно сделать так:
- Перейти в директорию пакета
$ cd ./packages/core-scripts; - Выполнить команду
$ npm link;
Теперь можно локально запускать команду $ core-design ....