-
Notifications
You must be signed in to change notification settings - Fork 14
Description
В рамках улучшения работы с кодом и борьбой с круговыми ссылками предлагается ввести следующие правила:
-
Запрещается каким-либо образом изменять прелюдию V4 в слоях. В дальнейшем, мы хотим собирать прелюдию статически и механизмы override не будут работать вовсе.
-
Запрещается переопределять core/ модули в слоях кроме разводящих страниц (например,
core/request/engines/index) и интерфейсов (например,core/request/interface). Добавлять новые файлы при этом допускается. -
Все публичные модули обязаны иметь в своей корневой папке package.json с декларацией опции exports.
Импортировать что-то из этого модуля, чего нет в exports - нельзя. К компонентам нужно отдельное правило, т.к. там уже естьindex.js- надо обсуждать. -
Компонент должен реэкспортировать все своё public API. Доступ к API компонента должен осуществляться только по импорту главного файла, имя которого совпадает с папкой компонента.
-
Если внутри компонента объявлен другой компонент, то он является приватным и не может использоваться вне родителя.
Необходимо внести иерархию пространств имен, в рамках которых разрешены или запрещены импорты.
Вышестоящие пространства имен не допускают импортов из нижестоящих.
src/config- runtime конфиг.src/lang- языковые пакеты.src/prelude- сюда надо вынести прелюдию.src/core- общая библиотека.src/models- общие дата провайдеры.src/routes- пути приложения (в load функции можно делать динамические импорты на что угодно)src/init- инициализация приложения.src/presets- пресеты для компонентов и приложения.src/components- библиотека компонентов.src/*/core|models|components|pages- неймспейс для подпроектов, например, cb или cps.src/pages- страницы приложения.src/entries- entry файлы сборки.
Изменения модулей:
src/core/preludeвынести вsrc/prelude.src/core/initвынести вsrc/init.src/core/component/stateвынести вsrc/core/state.src/core/component/client-stateвынести вsrc/core/client-state.src/core/component/event/emitterвынести вsrc/core/global-emitter.src/core/component/event/providersвынести вsrc/init.
Для независимых runtime модулей следует размещать их вне "src".
Например, standalone/rum.
Дальнейшие улучшения:
- Прелюдия должна собираться в отдельный бандл.