Next.js11에서 정적 HTML을 생성하려고하면 next/image 또는 <img/> 태그와 관련된 오류가 발생했습니다.
무엇을 하려고 하는가
프런트 엔드를 Next.js11에서 개발하고 있습니다.
궁극적으로 정적 HTML을 생성하고 Google Cloud Storage(GCS)에 호스팅하고 게재합니다.
Next.js에 의한 정적 HTML 생성과 GCS에 의한 정적 웹사이트 호스팅에 대해서는 다음 사이트를 참고로 하고 있습니다.
무엇이 있었는지
Next.js에서 정적 HTML을 생성하는 중에 오류가 발생했습니다.
next build && next export
에서 정적 사이트를 생성 할 때 next/image를 사용하면 오류가 발생합니다. 하지만 Next.js11에서는 img 태그를 사용하면 빌드시 오류가 발생합니다. img 태그를 사용하여 eslint 설정을 변경할 수밖에 없습니까? 피 c. 라고 r. 코m/c0g45tm㎺Q — 스기야 마토시키 (@llwz886q) August 27, 2021자세한 내용은 다음과 같습니다.
next/image 사용
사이트에 로고를 설치하려면
import Image from 'next/image'
const Logo = () => (
<Image
src="/logo.svg"
alt="logo"
width={128}
height={128}
/>
)
export default Logo
↑ 이런 파일을 만들었습니다.
로컬 환경에서는 next dev
를 실행 중이며 문제없이 로고가 표시됩니다.
정적 HTML을 생성하기 위해 next build && next export
를 실행하면
↑ 오류가 발생했습니다.
확실히 Basic Features: Image Optimization | Next.js
The next/image component's default loader is not supported when using next export. However, other loader options will work.
라고 적혀 있습니다.
img 태그 사용
여기서 next/image
대신 <img>
태그를 사용하여
const Logo = () => (
<img
src="/logo.svg"
alt="logo"
width="128"
height="128"
/>
)
export default Logo
logo
컴포넌트를 ↑ 이렇게 다시 작성했습니다.
다시 next build && next export
를 실행하면
<img> 태그 대신 next / image를 사용하는 오류이 발생했습니다.
From Next.js 11, ESLint is supported out-of-the-box and a new set of rules is now provided, including the @next/next/no-img-element rule.
라는 의미로
{
"extends": ["next", "next/core-web-vitals"],
+ "rules": {
+ "@next/next/no-img-element": "off"
+ }
}
로 설정하면 <img>
태그를 사용할 수 있습니다.
결론
정적 HTML을 생성 할 때 next / image를 사용할 수 없더라도 이미지를 최적화하려면 어떻게해야합니까?
Image optimization for static NextJS sites를 참조하여 next-optimized-images을 사용했습니다.
yarn add next-optimized-images imagemin-svgo
↑ 패키지를 설치하고(svg만 최적화를 대상으로 하는 예)
+ const withOptimizedImages = require('next-optimized-images')
- module.exports = {
+ module.exports = withOptimizedImages({
reactStrictMode: true,
trailingSlash: true,
+ handleImages: ['svg'],
- }
+ })
next.config.js
를 ↑ 이렇게 수정하고, next build && next export
를 실행해 완성입니다.
참고
- Advanced Features: 정적 HTML 내보내기 | Next.js
- Basic Features: Image Optimization | Next.js
- Error: Do not use <img>. Use Image from 'next/image' instead. - Next.js using html tag <img /> ( with styled components ) - Stack Overflow
- Image optimization for static NextJS sites
- 정적 웹사이트 호스팅 | Cloud Storage | Google Cloud
Reference
이 문제에 관하여(Next.js11에서 정적 HTML을 생성하려고하면 next/image 또는 <img/> 태그와 관련된 오류가 발생했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toshikisugiyama/items/9d9ada2de0cedb03a21e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)