diff --git a/_posts/2023/10/why-i-wont-use-next.js-kent-c-dodds.mdx b/_posts/2023/10/why-i-wont-use-next.js-kent-c-dodds.mdx deleted file mode 100644 index 84c14a7..0000000 --- a/_posts/2023/10/why-i-wont-use-next.js-kent-c-dodds.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: 'Odpowiedź na artykuł „Why I won’t use Next.js” autorstwa Kent C. Dodds' -permalink: 'why-i-wont-use-next.js-kent-c-dodds' -type: post -date: 2023-10-28T18:00:42.569Z -authors: - - michal-miszczyszyn -category: javascript -series: - slug: react-js - name: React.js -thumbnail: - url: /public/assets/uploads/2023/10/why-i-wont-use-next.js-kent-c-dodds.png - width: 1920 - height: 1005 ---- - -Kilka dni temu świat obiegł artykuł Kent C. Dodds o krzykliwym tytule „Why I won't use Next.js”. Kent krytykuje w nim Next.js, a jako przykład frameworka rozwiązującego wszystkie problemy podaje Remix. Cóż, to nie do końca tak… Poniżej znajdziecie moją odpowiedź na każdy z podpunktów. - ---- - - - - -- - English version - -- - Wersja po polsku - - -## Independence - -> OpenNext exists because Next.js is difficult to deploy anywhere but Vercel. - -To zdanie mogłoby być prawdziwe, gdyby brzmiało „OpenNext istnieje ponieważ deployowanie Next.js na AWS z użyciem serverless jest trudne”. I to absolutnie prawda, jest to dość skomplikowane. Skomplikowane do tego stopnia, że **Remix również nie udostępnia gotowego template'u na AWS z serverless** wbrew temu co zdaje się sugerować Kent w swoim artykule. - -OpenNext korzysta z SST – projektu, który powstał po to, aby ułatwić deployment aplikacji na AWS. Nie jest to specyficzne ani celowane tylko w Next.js, a wręcz przeciwnie: na stronie SST wymieniono Next.js, Astro, SvelteKit, SolidSite i… Remix. - -Teraz, czy Vercel ma interes w tym, aby ułatwiać korzystanie z Next.js na innych hostingach mimo, że sam oferuje swoje płatne usługi? Oczywiście nie. Mimo to, w repozytorium Next.js znajdziemy przykłady tego, jak to robić [1](https://github.com/vercel/next.js/tree/canary/examples/with-docker-compose) [2](https://github.com/vercel/next.js/tree/canary/examples/with-docker-multi-env) [3](https://github.com/vercel/next.js/tree/canary/examples/with-docker), a dokumentacja opisuje nawet jak zaimplementować [własny Data Cache](https://nextjs.org/docs/app/api-reference/next-config-js/incrementalCacheHandlerPath). - -## Next.js is eating React - -> Ever since then, the React team has felt much less collaborative. - -Brakuje tu jakichś konkretnych argumentów albo przykładów, a trudno się zgadzać lub nie zgadzać z czyimiś odczuciami. Z mojej perspektywy nie zmieniło się nic oprócz _velocity_ – rozwój i wdrażanie nowych rzeczy do Reacta mocno przyśpieszyło przez ostatni rok. Ale nadal dzieje się to **publicznie, jest proces RFC**, wdrożenie do wersji `canary` i dopiero dużo, dużo później w stabilnej wersji. - -Problemem dla zespołu Remixa może być to, że **to nie oni, a team Next.js wykorzystał nowe feature'y Reacta jako pierwszy**. Mówimy tu o React Server Components i Server Actions – rzeczach, które nie są częścią samego Nexta, a właśnie Reacta i w zasadzie każdy metaframework może z nich korzystać. Remix świadomie i [celowo tego nie robi](https://remix.run/blog/react-server-components#remix-can-take-full-advantage-of-rsc), więc tym bardziej trudno zrozumieć ten punkt krytyki. - -## Experimenting on my users - -> Features that Next.js is shipping as stable are in the canary release of React. - -Tak jest, dokładnie! Tylko, że określenie `canary` w React ma nieco [inne znaczenie niż w innych projektach](https://react.dev/blog/2023/05/03/react-canaries). Twórcy Reacta mówią, że przez `canary` rozumieją taką wersję React.js, która jest gotowa do adopcji w metaframeworkach. Wersja niestabilna Reacta oznaczona jest tagiem `experimental`. To chyba wyjaśnia wątpliwości podane w tym akapicie, prawda - -## Too much magic - -Wbrew temu co pisze Kent, Next.js w pełni zaadoptował Web API. Formularze są, cóż, zwykłymi `form`, API Route'y korzystają z `Request` i `Response`, jest ogromny nacisk na `fetch` i tak dalej… **Zdecydowanie mniej magii niż w poprzednich wersjach.** - -Dla odmiany, Remix idzie w [zupełnie przeciwnym kierunku](https://twitter.com/ryanflorence/status/1686757173202997249): - -- zamiast standardowego `async/server components` mają `loader` -- zamiast standardowego `server actions`, `"use server"` mają `action` -- zamiast standardowego `"use client"` mają `code splitting` -- zamiast standardowego `async components` mają SSR `ErrorBoundary` -- zamiast standardowego `async components` mają `defer` -- zamiast standardowego `