풀스택 플러그인 소개
6398 단어 webdevjavascripttooling
배경
현대 웹 개발에 참여하고 있다면(원하든 원하지 않든) 의심할 여지 없이 빌드 플러그인에 익숙할 것입니다. 이를 사용하여 TypeScript를 JavaScript로 변환하거나 CSS 파일을 원활하게 가져올 수 있습니다. 이것은 언어나 브라우저 표준이 허용하는 것보다 더 빠르게 움직일 수 있는 최신 개발자 경험(DX) 도구의 놀라운 일입니다.
Sometimes the ambition of these plugins exceeds the capabilities of the tooling.
하지만 가끔 DX는... '부족'하다고 합시다. 때때로 이러한 플러그인의 야망은 도구의 기능을 초과합니다. 때때로 통합은 문서의 "고급"섹션에서 미로 같은 지침을 성공적으로 탐색하고 이해하는 것을 의미합니다.
이것은 일이 무너지는 곳입니다
styled-components 의 만족스러운 사용자라고 가정해 보겠습니다. SSR(서버측 렌더링) 통합을 채택하기 전까지는 모든 것이 훌륭합니다. 이와 같이 설정하면 다음과 같은 큰 이점이 있습니다.
이것은 매우 강력한 이점이지만 사전 설정은 약한 마음을 위한 것이 아닙니다. 이것을 설정하려면 여러 가지를 조정해야 합니다.
Configure the babel plugin 귀하의 번들러 뒤 주르에서.
Wire up server-side rendering
ServerStyleSheet
인스턴스를 구성합니다. <StyleSheetManager />
구성 요소로 래핑하고 ServerStyleSheet
인스턴스를 전달합니다. ServerStyleSheet
인스턴스에서 생성된 스타일 태그를 포함하도록 제공된 HTML을 수정합니다. 꽤 많습니다.
하지만 그건
styled-components
'잘못이 아니다. 그것이 바로 지금 우리의 툴링이 작동하는 방식입니다. 빌드 도구가 있고 런타임 도구가 있으며 두 가지가 만나지 않습니다.동서양을 잇다
그렇다면 이 격차를 어떻게 해소할 수 있을까요? 우리는 번들러와 런타임 간의 관계를 재고하고 두 가지가 서로 대화하도록 해야 합니다.
vite 을 사용한다고 가정해 보겠습니다. 전체 스택 플러그인은 다음과 같습니다.
interface FullStackPlugin extends VitePlugin {
/**
* Provide a set of references to server-side plugins.
*
* A server-side plugin can participate in the server-side rendering
* pipeline and do things like:
*
* - Set up any necessary per-request context (instances).
* - Wrap the main component in Providers wired up to the context.
* - Modify the HTML markup for the response.
* - Modify the HTTP headers for the response
* - Contribute to the server-to-client hand-off of data.
*/
getServerRendererPlugins?: () =>
| MaybeArray<RendererPluginReference>
| undefined;
/**
* Provide a set of references to client-side plugins.
*
* A client-side plugin can participate in the client-side rendering
* pipeline and do things like:
*
* - Set up any necessary per-request context, having access to that
* request's server-to-client handoff data.
* - Wrap the main component in Providers wired up to the context.
* - Perform any blocking, asynchronous operations before actually
* doing the initial hydration.
*/
getClientRendererPlugins?: () =>
| MaybeArray<RendererPluginReference>
| undefined;
}
/**
* Describe where to find the code for the runtime plugin, including
* which export to use (defaults to the default export) and any
* configuration that needs to be serialized into that plugin at runtime.
*/
interface RendererPluginReference {
readonly spec: string;
readonly exportName?: string;
readonly config: unknown;
}
type MaybeArray<T> = Array<T> | T;
이것이 도서관 저자로서 당신에게 주는 힘을 상상해 보십시오.
다음은 전체 스택 플러그인으로 깔끔하게 해결되는 몇 가지 사용 사례입니다.
styled-components
, linaria
, twind
등과 같은 도구에 대한 중요한 CSS의 SSR 추출... react-query
를 사용하여 서버측 데이터를 로드하고 해당 데이터의 서버에서 클라이언트로의 전달을 자동으로 설정합니다. react-router
와 같은 자동 파일 시스템 기반 라우팅을 위한 remix
의 심층 통합. 그리고 그것은 빙산의 일각에 불과합니다. 또 무엇을 상상할 수 있습니까?
관련되어있다
이 아이디어가 매력적이라고 생각되면 Discordhttps://discord.gg/dSHCnQxbba로 와서 채팅하세요. 이것은 단순한 꿈이 아닙니다. Nostalgie 의 다음 버전에 적용되는 이 약속을 이행하는 작업 코드가 있습니다. Vite 의 성능과 속도로 인해 그 경험은 당신을 놀라게 할 것입니다.
표지 이미지: Clark Van Der Beken: https://unsplash.com/photos/Tk0B3Dfkf_4
Reference
이 문제에 관하여(풀스택 플러그인 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ggoodman/introducing-full-stack-plugins-2l7a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)