Sealpage - przemyślenia dot. podziału komponentów na pliki dla backendu i front-endu

Myślałem, aby dzielić komponenty na osobne pliki dla backendu i front-endu, ale pomyślałem trochę i mam pomysł, jak możemy tego uniknąć.

W trakcie prac nad kopmonentami sealpage’owymi napotkaliśmy kilka razy problem z mieszaniem kontekstów node’a i przeglądarki.

propControls

Pierwszym razem było używanie odniesień do propsControls poprzez referencję. propsControls były pisane w jsx, więc node ich nie ogarniał. Nie chcieliśmy robić transpilacji kodu po stronie backendu, dlatego zdecydowaliśmy się używać stringów z nazwą propControlsów zamiast referencji.

node’owe require’y

Za drugim razem na te problemy natrafiliśmy niezależnie z @arkadiusz.wieczorek i @micsta. Tworzyliśmy komponenty, które wymagały require’ów node’owych - np. coś do konwersji obrazków, itp. Rozwiązaniem, na które wtedy wpadłem było podzielenie komponentów na osobne pliki - jeden dla backendu, drugi dla front-endu. Wtedy front-end require’owałby tylko rzeczy potrzebne dla frontu, a backend tylko te dla backendu.

Obawiam się jednak, że taki podział na pliki spowodowałby zbyt duże zamieszanie. Dlatego proponuję, abyśmy do dodanego w trakcie prac nad T1524 obiektu s dodać funkcję backend_require, którą wywołalibyśmy wewnątrz funkcji render. Ta funkcja sprawdzałaby po prostu, czy jesteśmy w node czy nie i odpowiednio albo zwracała wynik require na zadany string albo rzucała error.

Dzięki temu, że ta funkcja będzie się nazywała inaczej niż po prostu require uda nam się zapobiec wrzucaniu tej depki do bundla na front przez Webpacka.

Ten wątek dotyczy problemów napotkanych w T1524 i T1500

1 Like

A czy wtedy nadal jest potrzeba pozostawania przy webpacku?

Yis, webpack jest potrzebny aby transpilowac i bundlowac js i jsx na front

Nie robiliśmy tego parcelem? Jak dobrze rozumiem parcel też potrafi transpilować.

Parcel jest bardzo wybredny jezeli chodzi o te transpilacje. Juz nie raz sie zdarzylo, ze patrzyl na plik .jsx i robi: “??? co to za znaczniki: ‘<’??? Co to za dziwny plik???”. A webpackowi sie mowi: jak widzisz plik .jsx, to go se stranspiluj, to wszystko.

Napotkalismy ten problem z Michalem przy jego pracy nad pluginami do Sealpage’a. Stąd webpack

1 Like

Jako ilustracja tego, że napotkałem ten błąd już nie raz może poświadczyć:

(oraz issue, który założyłem w ich repo)

1 Like

Ok, zrobiłem diffa wprowadzającego te zmiany:

https://hub.sealcode.org/D625

@micsta dodałem Cię jako blokującego reviewera. Jest kluczowe, abyś zapoznał się szczegółowo z tymi zmianami, abyś mógł gładko domerge’ować je do D620. Dlatego dodałem też D625 jako zależność dla D620

Okej, jednak będę mógł do tego zajrzeć dopiero po sesji tj. po 27 czerwca.

1 Like