Przerabiam aplikację na yarn workspaces, dodałem package.json itd i mam workspace jako zależność. Instaluję pakiety, uruchamiam i krzyczy, że jest w tym workspace zabronione słowo kluczowe tj. export es6. Główna aplikacja używa backpacka i build używa modułów cjs. Wywnioskowałem, że muszę transpilować ten workspace do commonjs przy pomocy babela?
import
Ale ja nie chcę nic importować, to jest główny index.js w workspace, w którym exportuje wszystkie składowe workspaca. Widziałem to w wielu przykładach i bibliotekach np. Nest.js.
Tuta j przykład, który koleżka mi dał https://github.com/PKrasinski/ESWall/blob/main/packages/ui/src/index.ts
Nawet jest w drugiej linijce stack trace /cjs/loader/
. Build używa modułów cjs, a z workspaca robi się paczka z modułami esm, więc nie jest kompatybilna.
Pliki z rozszerzeniem cjs
(CommonJS) działają jedynie z składnią require / module.exports
, więc tak, pozostałe importy / exporty musisz zamienić na taki sam format.
Drugim rozwiązaniem byłoby zastąpienie tego backpacka
innym narzędziem. Nie pamiętam, żeby np korzystając z Vite
miałbym ten sam problem.
@Xarviel: Ale to są wszystkie pliki z rozszerzeniem js. Build idzie w cjs, a po dodaniu workspace jest on instalwany w node_modules i używa esm. To chyba da się transpilować babelem zależność korzystającą z esm do cjs? Jest taki plugin: https://babeljs.io/docs/en/babel-plugin-transform-modules-commonjs
No, bo patrz, załóżmy, że piszę bibliotekę z modułami esm i puszczam na npma. To co teraz nikt jej nie będzie mógł użyć w projekcie korzystającym z cjs?
szafran98 napisał(a):
No, bo patrz, załóżmy, że piszę bibliotekę z modułami esm i puszczam na npma. To co teraz nikt jej nie będzie mógł użyć w projekcie korzystającym z cjs?
Bezpośrednio w przeglądarce cjs
nie przejdzie, więc ktoś musiałby z powrotem zamienić na inny format :D
Pierwszy raz spotykam się z tym narzędziem backpack
, więc nic mądrego nie mogę powiedzieć. Ogólnie z tego co patrzę na npm (https://www.npmjs.com/package/backpack-core) to jest mało popularny i raczej trudno znaleźć jakieś sensowne tematy na jego temat, więc jeśli dość niedawno go zainstalowałeś to ja bym zamienił na coś innego.
Bezpośrednio w przeglądarce cjs nie przejdzie, więc ktoś musiałby z powrotem zamienić na inny format :D
To akurat backend i chodzi mi o użycie module.exports
, bo rozszerzenia przecież nie trzeba zmieniać.
Niestety ten backpack to noname i jest od dawna, więc teraz nie zmienię :/ No, ale babel powinien to ogarnąć przecież chyba od tego jest.
Ogarnąłem tego babela, nie wiem, czy dobrze, ale teraz jest co innego.
Odtworzyłem problem na minimalnym repo bez śmieci - https://github.com/szafran98/workspace-test
Teraz na githubie dodali, że można odpalić repo w VSC web, więc jeśli ktoś jest tak miły i chciałby sprawić, żebym wstał jutro z uśmiechem na ustach, wspominając użytkownika, który mi pomógł, to będę bardzo wdzięczny. W /application/server
komenda npm run dev
.
Z uszanowaniem,
szafran98