Skip to content

Вводим строгие контракты на работу с модулями V4 #1111

@kobezzza

Description

@kobezzza

В рамках улучшения работы с кодом и борьбой с круговыми ссылками предлагается ввести следующие правила:

  1. Запрещается каким-либо образом изменять прелюдию V4 в слоях. В дальнейшем, мы хотим собирать прелюдию статически и механизмы override не будут работать вовсе.

  2. Запрещается переопределять core/ модули в слоях кроме разводящих страниц (например, core/request/engines/index) и интерфейсов (например, core/request/interface). Добавлять новые файлы при этом допускается.

  3. Все публичные модули обязаны иметь в своей корневой папке package.json с декларацией опции exports.
    Импортировать что-то из этого модуля, чего нет в exports - нельзя. К компонентам нужно отдельное правило, т.к. там уже есть index.js - надо обсуждать.

  4. Компонент должен реэкспортировать все своё public API. Доступ к API компонента должен осуществляться только по импорту главного файла, имя которого совпадает с папкой компонента.

  5. Если внутри компонента объявлен другой компонент, то он является приватным и не может использоваться вне родителя.

Необходимо внести иерархию пространств имен, в рамках которых разрешены или запрещены импорты.
Вышестоящие пространства имен не допускают импортов из нижестоящих.

  1. src/config - runtime конфиг.
  2. src/lang - языковые пакеты.
  3. src/prelude - сюда надо вынести прелюдию.
  4. src/core - общая библиотека.
  5. src/models - общие дата провайдеры.
  6. src/routes - пути приложения (в load функции можно делать динамические импорты на что угодно)
  7. src/init - инициализация приложения.
  8. src/presets - пресеты для компонентов и приложения.
  9. src/components - библиотека компонентов.
  10. src/*/core|models|components|pages - неймспейс для подпроектов, например, cb или cps.
  11. src/pages - страницы приложения.
  12. src/entries - entry файлы сборки.

Изменения модулей:

  1. src/core/prelude вынести в src/prelude.
  2. src/core/init вынести в src/init.
  3. src/core/component/state вынести в src/core/state.
  4. src/core/component/client-state вынести в src/core/client-state.
  5. src/core/component/event/emitter вынести в src/core/global-emitter.
  6. src/core/component/event/providers вынести в src/init.

Для независимых runtime модулей следует размещать их вне "src".
Например, standalone/rum.

Дальнейшие улучшения:

  1. Прелюдия должна собираться в отдельный бандл.

Metadata

Metadata

Assignees

Labels

coreCore module issueenhancementImprovement of the existing API

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions