Skip to content

feat(*): add modules support - #56

Merged
heymdall-legal merged 6 commits into
masterfrom
feat/module
Jul 26, 2023
Merged

feat(*): add modules support#56
heymdall-legal merged 6 commits into
masterfrom
feat/module

Conversation

@heymdall-legal

@heymdall-legal heymdall-legal commented Jul 19, 2023

Copy link
Copy Markdown
Collaborator

Реализация модулей для приложений, которая дает возможность переиспользовать куски одних проектов на других.

Подробная документация лежит в самом рул-реквесте, но удобнее ее читать вот тут: https://github.com/core-ds/arui-scripts/blob/feat/modules/packages/arui-scripts/docs/modules.md

Мотивация

Зачем городить собственный огород, когда уже есть module federation?

  1. Возможность создавать модули, которые можно использовать в приложениях без вебпака (ну или на старом вебпаке)
  2. Дополнительная абстракция на случай отказа от webpack (например если мы захотим перейти на turbopack когда он выйдет, или на любую другую новую технологию)
  3. Предопределенный тип модулей. Из-за того, что код модулей подключается в проекты в рантайме - у нас нет никакой compile-time проверки типов. Чтобы модули можно было надежно использовать в масштабе больших, долго живущих проектов - нужно иметь предопределенный формат этих самых модулей (который в дальнейшем можно расширять, но не менять). Поскольку arui-scripts является основным инструментом сборки для большинства проектов, вне зависимости от направления - он является хорошим местом для централизированного определения этого самого формата.
  4. Общий формат связывания модулей с сервером. Много наших проектов имеют серверную часть, и наш клиентский код часто на нее непосредственно завязан. module federation реализует только клиентскую часть, при этом никак не затрагивая то, как этой клиентской части связаться с сервером. Тут есть попытка решить эту проблему.

Откуда это все?

Реализация модулей в arui-scripts во многом вдохновлена реализацией модулей у корпоратов. Там она показала себя весьма успешно, на ней реализовано уже не малое кол-во модулей.
Код тут не скопирован 1-к-1 из корпоратской реализации - во многом он является переосмыслением той реализации, с исправлением косяков и созданием более "прямого" api.
Сейчас про переиспользование клиентского кода между проектами (или даже направлениями) говорят практически везде, поэтому было решено вынести существовавшую реализацию на общий уровень.

Как посмотреть

Для того, чтобы посмотреть на модули в рамках arui-scripts есть два "тестовых" проекта - один предоставляющий модули, и второй потребляющий их.

Для локального запуска:

git clone git@github.com:core-ds/arui-scripts.git
cd arui-scripts
git checkout feat/module
yarn install
yarn build

Для запуска "поставшика" модулей - yarn workspace example-modules run start
Для запуска "потребителя" - yarn workspace example run start

Проект-потребитель будет запущен на http://localhost:8080

Совместимость

Изменения в arui-scripts являются по сути полностью обратно-совместимыми с предыдущими версиями, изменения могут затронуть только проекты, которые добавят себе в конфигурацию embedded модули и имеют на проекте оверрайды для конфигурации вебпака - вместо одной конфигурации в оверрайдах они будут получать массив конфигураций.

Совместимость с модулями корпоратов

На данный момент реализация НЕ совместима с модулями корпоратов. Реализация такой совместимости - отдельная большая задача, которая должна делаться не в arui-scripts, а в корпоратах. В целом сделать слой совместимости между тем, что есть у корпов и тем, что написано тут - вполне возможно.

На данный момент есть явный недостаток тестов (как на код самого arui-scripts, так и новых пакетов). По возможности буду покрывать тестами то что получится, но уже в следующих итерациях.

@heymdall-legal

Copy link
Copy Markdown
Collaborator Author

Пул-реквест все равно получился большой, но изменения в самом пакете arui-scripts тут сведены к минимуму - только то, что непосредственно нужно для работы самих модулей


export const MF_ENTRY_NAME = 'remoteEntry.js';

export function patchMainWebpackConfigForModules(webpackConf: webpack.Configuration) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: тут мб сменить название? или засунуть сюда patchWebpackConfigForEmbedded, чтобы в вебпак-конфиге уже готовая конфигурация была? а то складывается ощущение что именно в этой функции происходит патчинг для всех модулей, а по факту тут только wmf, сам embedded в webpack-конфиге патчится через patchWebpackConfigForEmbedded.

Немного просто рвет шаблон что modules это только wmf здесь, а не все вместе)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Изначально назвал pactchWebpcacConfigFromMf, но следующая строчка заставила переименовать, потому что к mf она как раз отношения не имеет, а нужна только для embedded.

@Hydrock

Hydrock commented Jul 21, 2023

Copy link
Copy Markdown
Contributor

Сначала не смог собрать по инструкции

git clone git@github.com:core-ds/arui-scripts.git
cd arui-scripts
yarn install
yarn build

Нужно добавить git checkout feat/module

Затем не выполнилась команда yarn build

• Packages in scope: @alfalab/scripts-modules, @alfalab/scripts-server, arui-scripts, arui-scripts-docker, example, example-modules
• Running build in 6 packages
• Remote caching disabled
arui-scripts:build: cache miss, executing 53e188107a8eee03
@alfalab/scripts-modules:build: cache miss, executing 71fa44e64539970f
@alfalab/scripts-modules:build: command not found: tsc
@alfalab/scripts-modules:build: ERROR: command finished with error: command (/Users/avechkanov/Documents/web/arui-scripts/packages/arui-scripts-modules) yarn run build exited (1)
command (/Users/avechkanov/Documents/web/arui-scripts/packages/arui-scripts-modules) yarn run build exited (1)

 Tasks:    0 successful, 2 total
Cached:    0 cached, 2 total
  Time:    2.159s
Failed:    @alfalab/scripts-modules#build

Я думаю что сборка пакета не должна быть завязано на глобальную переменную tsc

tsc компилируется под процессор и кладется в папку .bin в node_modules

сослаться можно наверное так node_modules/.bin/tsc

Везде где используется tsc - мне приiлось заменить на /Users/avechkanov/Documents/web/arui-scripts/node_modules/.bin/tsc - тот путь куда собрался tsc проекта
Только после этого билд прошол успешно.

@Hydrock

Hydrock commented Jul 21, 2023

Copy link
Copy Markdown
Contributor

Запустил. К сожалению не так много времени, чтобы поэксперементировать. Но надеюсь найду время.

В целом Дока к модулям очень хорошая, все понятно. Немного смущат нейминг.

embded модули - вроде и wmf тоже встроенные
серверные модули - вводит в заблуждение - ожидаешь SSR, и еще путают новые Серверные React компоненты. Мне кажется не лучшее название. Хотя могу быть и не прав. Тут важно погрузиться в контекст.

@heymdall-legal

Copy link
Copy Markdown
Collaborator Author

Про нейминг - согласен. Но у меня идей как лучше сделать нету

@sanityFair

sanityFair commented Jul 25, 2023

Copy link
Copy Markdown
Contributor

Минимальную версия ноды не 14 в arui-scripts?
На 12.13.0 - не будет работать postcss, но это можно потом исправить.

@changeset-bot

changeset-bot Bot commented Jul 25, 2023

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: b7ac429

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 5 packages
Name Type
@alfalab/scripts-modules Minor
@alfalab/scripts-server Minor
arui-scripts Minor
example-modules Patch
example Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@heymdall-legal

Copy link
Copy Markdown
Collaborator Author

Опубликованные пререлизные версии пакетов 0.0.0-next-20230725145300
@alfalab/scripts-modules@0.0.0-next-20230725145300
@alfalab/scripts-server@0.0.0-next-20230725145300
arui-scripts@0.0.0-next-20230725145300

@vaagnavanesyan
vaagnavanesyan self-requested a review July 25, 2023 20:10
Heymdall added 2 commits July 26, 2023 20:56
# Conflicts:
#	packages/arui-scripts-test/CHANGELOG.md
#	packages/arui-scripts-test/package.json
#	yarn.lock
@heymdall-legal
heymdall-legal merged commit b194934 into master Jul 26, 2023
@heymdall-legal
heymdall-legal deleted the feat/module branch July 26, 2023 19:03
@core-ds-bot core-ds-bot mentioned this pull request Jul 26, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Общий подход к организации многих entry-point для фронтовых приложений

6 participants