Next.js: tailwind + css λͺ¨λ“ˆλ‘œ devμ—μ„œ κΉœλ°•μ΄λŠ” μŠ€νƒ€μΌ

에 λ§Œλ“  2020λ…„ 05μ›” 03일  Β·  13μ½”λ©˜νŠΈ  Β·  좜처: vercel/next.js

버그 μ‹ κ³ 

버그 μ„€λͺ…

css λͺ¨λ“ˆκ³Ό ν•¨κ»˜ tailwindcssλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”λ° νŽ˜μ΄μ§€κ°€ μ²˜μŒλ‘œλ“œ 될 λ•Œ λͺ¨λ“  μŠ€νƒ€μΌμ΄λ‘œλ“œλ˜μ§€ μ•ŠμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€. 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ νŒŒμ•…ν•˜κΈ° μœ„ν•΄ tailwindcss 예제λ₯Ό μ‹€ν–‰ν•˜κ³  css λͺ¨λ“ˆμ—μ„œ μŠ€νƒ€μΌμ„ μΆ”κ°€ν–ˆμœΌλ©° prod 용으둜 λΉŒλ“œ 된 κ²½μš°μ—λ„ λ°œμƒν•©λ‹ˆλ‹€.

μž¬ν˜„ν•˜λ €λ©΄

https://github.com/zeit/next.js/tree/canary/examples/with-tailwindcss μ—μ„œ 예제 μ‹€ν–‰

μŠ€νƒ€μΌμ΄μžˆλŠ” index.module.css 파일 μΆ”κ°€

index.js νŽ˜μ΄μ§€μ˜ CSS λͺ¨λ“ˆμ—μ„œ μŠ€νƒ€μΌμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” 행동

css λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  μŠ€νƒ€μΌμ΄ κΉœλ°•μž„μ—†μ΄ μ²˜μŒμ— μ œλŒ€λ‘œλ‘œλ“œλ©λ‹ˆλ‹€. CSS λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ λ™μž‘μ΄ μ˜ˆμƒλ©λ‹ˆλ‹€.

슀크린 μƒ·

May-03-2020 14-06-19

μ‹œμŠ€ν…œ 정보

  • 운영체제 : macOS
  • λΈŒλΌμš°μ € (ν•΄λ‹Ήν•˜λŠ” 경우) [예 : chrome, safari]
  • Next.js 버전 : v9.3.6
  • Node.js 버전 : v13.12.0
  • tailwindcss 버전 : v1.4.4
bug 2 next

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이 문제λ₯Ό ν•΄κ²°ν•  μˆ˜μžˆλŠ” ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆλ‹€.
μ‚¬μš©μž 지정 " _document.js "을 (λ₯Ό) λ§Œλ“€κ³  Html ꡬ성 μš”μ†Œμ— " no-fouc "클래슀λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
μ‚¬μš©μž 지정 " _app.js "λ₯Ό λ§Œλ“€κ³  " componentDidMount "에 λ‹€μŒ μ½”λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

const removeFouc = (foucElement) => {
      foucElement.className = foucElement.className.replace('no-fouc', 'fouc')
    }
 removeFouc(document.documentElement)

κΈ€λ‘œλ²Œ μŠ€νƒ€μΌμ— λ‹€μŒ μŠ€νƒ€μΌμ„ μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

.no-fouc {
  visibility: hidden;
 opacity: 0;
}

.fouc {
 visibility: visible;
 opacity: 1;
}

λͺ¨λ“  13 λŒ“κΈ€

λ‚˜λŠ” 이것이 CSS λͺ¨λ“ˆμ˜ μžλ™ μ½”λ“œ λΆ„ν• κ³Ό 관련이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ πŸ€”

μ•„λ§ˆλ„ https://github.com/zeit/next.js/issues/10268 κ³Ό 관련이

ꡬ성 μš”μ†Œμ— 일반 CSS λͺ¨λ“ˆμ„ μ‚¬μš©ν–ˆμœΌλ©° λͺ‡ ms 후에 μŠ€νƒ€μΌμ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

ꡬ성 μš”μ†Œμ— 일반 CSS λͺ¨λ“ˆμ„ μ‚¬μš©ν–ˆμœΌλ©° λͺ‡ ms 후에 μŠ€νƒ€μΌμ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

https://stackoverflow.com/a/42969608/943337 에 λ”°λ₯΄λ©΄ 방금 빈 슀크립트 νƒœκ·Έλ₯Ό μΆ”κ°€ν–ˆκ³  첫 λ²ˆμ§Έλ‘œλ“œμ‹œ λ‚˜νƒ€λ‚˜λŠ” μ‚¬μ΄λ“œ λ°” λ¬Έμ œκ°€ 이제 ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

https://github.com/vercel/next-plugins/issues/455#issuecomment -489452379

import Document, { Html, Head, Main, NextScript } from 'next/document';
import { GA_TRACKING_ID } from '../utils/anayltics';
class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    return { ...initialProps };
  }

  render() {
    return (
      <Html lang="de">
        <Head>
        </Head>
        <body>
          <Main />
          <NextScript />
          {/* Empty script tag as chrome bug fix, see https://stackoverflow.com/a/42969608/943337 */}
          <script> </script>
        </body>
      </Html>
    );
  }
}

export default MyDocument;

ꡬ성 μš”μ†Œμ— 일반 CSS λͺ¨λ“ˆμ„ μ‚¬μš©ν–ˆμœΌλ©° λͺ‡ ms 후에 μŠ€νƒ€μΌμ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

https://stackoverflow.com/a/42969608/943337 에 λ”°λ₯΄λ©΄ 방금 빈 슀크립트 νƒœκ·Έλ₯Ό μΆ”κ°€ν–ˆκ³  첫 λ²ˆμ§Έλ‘œλ“œμ‹œ λ‚˜νƒ€λ‚˜λŠ” μ‚¬μ΄λ“œ λ°” λ¬Έμ œκ°€ 이제 ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

import Document, { Html, Head, Main, NextScript } from 'next/document';
import { GA_TRACKING_ID } from '../utils/anayltics';
class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    return { ...initialProps };
  }

  render() {
    return (
      <Html lang="de">
        <Head>
        </Head>
        <body>
          <Main />
          <NextScript />
          {/* Empty script tag as chrome bug fix, see https://stackoverflow.com/a/42969608/943337 */}
          <script> </script>
        </body>
      </Html>
    );
  }
}

export default MyDocument;

κ°μ‚¬ν•©λ‹ˆλ‹€ @ Adrianjs42 μ‚¬μ΄λ“œ λ°”κ°€ ν¬λ‘¬μ—μ„œ λ©ˆμ·„μŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•  μˆ˜μžˆλŠ” ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆλ‹€.
μ‚¬μš©μž 지정 " _document.js "을 (λ₯Ό) λ§Œλ“€κ³  Html ꡬ성 μš”μ†Œμ— " no-fouc "클래슀λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
μ‚¬μš©μž 지정 " _app.js "λ₯Ό λ§Œλ“€κ³  " componentDidMount "에 λ‹€μŒ μ½”λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

const removeFouc = (foucElement) => {
      foucElement.className = foucElement.className.replace('no-fouc', 'fouc')
    }
 removeFouc(document.documentElement)

κΈ€λ‘œλ²Œ μŠ€νƒ€μΌμ— λ‹€μŒ μŠ€νƒ€μΌμ„ μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

.no-fouc {
  visibility: hidden;
 opacity: 0;
}

.fouc {
 visibility: visible;
 opacity: 1;
}

이것은 next@^9.4.5-canary.15 μ—μ„œ μˆ˜μ •λ˜μ–΄μ•Όν•©λ‹ˆλ‹€! μ—…κ·Έλ ˆμ΄λ“œν•˜μ—¬ μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

@Timer , λ‚˜λŠ” next@^9.4.5-canary.18 . 이제 CSS κΉœλ°•μž„μ΄ 개발 λͺ¨λ“œμ—μ„œ λ‚˜νƒ€λ‚˜μ§€ μ•Šμ§€λ§Œ ν”„λ‘œλ•μ…˜ λ²„μ „μ—μ„œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜ λ²„μ „μ—λŠ” μ—¬μ „νžˆ 버그가 μžˆμŠ΅λ‹ˆλ‹€.

material-ui + css λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— 직면 ν•œ μ•± 버전은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. https://cluster-11-lwj6nmcgy.vercel.app/ .

@ Prottoy2938 여기도 λ§ˆμ°¬κ°€μ§€ μž…λ‹ˆλ‹€. 이 λ¬Έμ œμ— λŒ€ν•œ μ˜κ²¬μ„ λ‚¨κ²ΌμŠ΅λ‹ˆλ‹€. https://github.com/vercel/next.js/issues/13058#issuecomment -654165987

@Timer , λ‚˜λŠ” next@^9.4.5-canary.18 . 이제 CSS κΉœλ°•μž„μ΄ 개발 λͺ¨λ“œμ—μ„œ λ‚˜νƒ€λ‚˜μ§€ μ•Šμ§€λ§Œ ν”„λ‘œλ•μ…˜ λ²„μ „μ—μ„œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜ λ²„μ „μ—λŠ” μ—¬μ „νžˆ 버그가 μžˆμŠ΅λ‹ˆλ‹€.

material-ui + css λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— 직면 ν•œ μ•±μ˜ 버전은 cluster-11-lwj6nmcgy.vercel.app μž…λ‹ˆλ‹€.

κ·€ν•˜μ˜ μ‚¬λ‘€λŠ” CSS λͺ¨λ“ˆ / tailwind와 관련이 μ—†μœΌλ©° material-ui의 사전 λ Œλ”λ§ κ΅¬ν˜„μ„ μžŠμ–΄ λ²„λ¦¬λŠ” 것과 관련이 μžˆμŠ΅λ‹ˆλ‹€ .https : //github.com/vercel/next.js/issues/7322#issuecomment -653858948

@casperle , 제 κ²½μš°μ—λŠ” μ„œλ²„ μΈ‘ λ Œλ”λ§ μ„ν•˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. material-ui μ—μ„œμ΄

v9.4.5-canary.28을 μ‚¬μš©ν•˜λ©΄ devμ—μ„œ κΉœλ°•μ΄μ§€ μ•Šκ³  ν”„λ‘œλ•μ…˜μ—μ„œ κΉœλ°•μž…λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰