Это монорепозиторий, в котором включены 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 ...
.