이번에 Next.js의 버전 12가 나온 것에 대해 알아보자.
Next.js 12 공식 영상 및 문서
https://youtu.be/dMBYI7pTR4Q
https://nextjs.org/blog/next-12
Update today by running npm i next@latest
.
<Image />
AVIF 지원원래 Babel로 컴파일 했었다가 이번에 컴파일러를 Rust로 완전히 새롭게 바꾸면서 빌드와 새로고침 속도가 빨라졌다는 내용
The Rust compiler is built on SWC, an open platform for the next generation of fast tooling.
// next.config.js
module.exports = {
swcMinify: true
}
// 이게 무엇을 의미하는 코드인지는 잘 모르겠다.
요청이 완료되기 전에 코드를 실행할 수 있으므로 Next.js에서 완전한 유연성(full flexibility)을 얻을 수 있습니다.
사용자의 요청에 따라 재작성, 리디렉션, 헤더 추가 또는 HTML 스트리밍까지 응답을 수정할 수 있습니다.
Next.js에서 미들웨어를 사용하려면 pages/_middleware.js
파일을 생성할 수 있습니다. 이 예에서는 표준 Web API 응답(MDN)을 사용합니다.
export function middleware(req, ev) {
return new Response('Hello, world!')
}
React 18은 Suspense, 업데이트 자동 일괄 처리, startTransition과 같은 API 및 React.lazy를 지원하는 서버 렌더링을 위한 새로운 스트리밍 API와 같은 기능을 추가합니다.
페이스북의 React 팀과 긴밀히 협력하여 React 18이 안정적인 릴리스를 향해 나아가기 위해 Next.js를 준비했습니다. 우리는 이러한 기능을 실험적 플래그로 Next.js 12에서 오늘 사용할 수 있도록 만들고 있습니다.
npm install react@alpha react-dom@alpha
React 18의 동시 기능에는 서버 측 Suspense 및 SSR 스트리밍 지원에 대한 기본 제공 지원이 포함됩니다. 이를 통해 HTTP 스트리밍을 사용하여 페이지를 서버 렌더링할 수 있습니다. 이것은 Next.js 12의 실험적인 기능이지만 일단 활성화되면 SSR은 미들웨어와 동일한 엄격한 런타임을 사용합니다.
활성화하려면 실험 플래그인 concurrentFeatures: true를 사용하세요.
// next.config.js
module.exports = {
experimental: {
concurrentFeatures: true
}
}
React Server Components를 사용하면 components 자체를 포함한 모든 것을 서버에서 렌더링할 수 있습니다.
이것은 서버에서 HTML을 미리 생성하는 서버 사이드 렌더링과 근본적으로 다릅니다.
Server Components를 사용하면 클라이언트 측 JavaScript가 필요하지 않으므로 페이지 렌더링이 빨라집니다.
이것은 서버 렌더링의 가장 좋은 부분을 클라이언트 측 상호 작용과 결합하여 애플리케이션의 사용자 경험을 개선합니다.
// next.config.js
module.exports = {
experimental: {
concurrentFeatures: true,
serverComponents: true
}
}
Next.js now enables you to do data fetching at the component level, all expressed as JSX. By using React Server components, we can simplify things. Special functions like getServerSideProps or getStaticProps are no longer needed. This aligns with the React Hooks model of colocating data fetching with your components.
You can rename any Next.js page to .server.js to create a Server Component and import client components directly inside your Server Components. These client components will hydrate and become interactive, so you add functionality like upvotes.
Next.js 11.1부터 CommonJS 모듈보다 우선 순위가 높은 ES 모듈에 대한 실험 지원을 추가했습니다. Next.js 12에서는 이것이 이제 기본값입니다.
CommonJS만 제공하는 NPM 모듈 가져오기는 계속 지원됩니다.
Next.js 12에는 URL을 통해 ES 모듈을 가져오기 위한 실험적 지원이 포함되어 있으므로 설치 또는 별도의 빌드 단계가 필요하지 않습니다.
이를 통해 Next.js는 로컬 종속성과 똑같이 원격 HTTP(S) 리소스를 처리할 수 있습니다.
URL 가져오기가 감지되면 Next.js는 원격 리소스를 추적하기 위해 next.lock 파일을 생성합니다. URL 가져오기는 오프라인에서 계속 작업할 수 있도록 로컬로 캐시됩니다.
Next.js는 클라이언트 및 서버 URL 가져오기를 모두 지원합니다.
module.exports = {
experimental: {
urlImports: ['https://cdn.skypack.dev']
}
}
그런 다음 URL에서 직접 모듈을 가져올 수 있습니다.
import confetti from 'https://cdn.skypack.dev/canvas-confetti'
내장된 Image Optimization API는 이제 AVIF 이미지를 지원하여 WebP에 비해 20% 더 작은 이미지를 가능하게 합니다.
AVIF 이미지는 WebP에 비해 최적화하는 데 시간이 더 오래 걸릴 수 있으므로 next.config.js의 새로운 images.formats 속성을 사용하여 이 기능을 선택하도록 합니다.
module.exports = {
images: {
formats: ['image/avif', 'image/webp']
}
}
// e.g., nginx
location /_next/webpack-hmr {
proxy_pass http://localhost:3000/_next/webpack-hmr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
// e.g., express (node.js)
app.all('/_next/webpack-hmr', (req, res) => {
nextjsRequestHandler(req, res)
})
// next.config.js
module.exports = {
experimental: {
// Enables the styled-components SWC transform
styledComponents: true,
},
};
"displayName": true
는 dev에서 default, product에선 안보이게 됨