Next.js: λ‹€μŒ ν”„λ‘œμ νŠΈμ— CSSλ₯Ό ν¬ν•¨ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2016λ…„ 11μ›” 27일  Β·  31μ½”λ©˜νŠΈ  Β·  좜처: vercel/next.js

λ‚˜λŠ” Nextκ°€ Glamour와 css-in-jsλ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, Next ν”„λ‘œμ νŠΈμ—μ„œ μ‹€μ œ css/less/scssλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 방법은 μ—†μ„κΉŒμš”...어쩐지? 적어도 ν”„λ‘œμ νŠΈλ₯Ό λΆ€νŠΈμŠ€νŠΈλž©ν•˜κΈ° μœ„ν•΄μ„œλŠ”?

λ‚΄ 좔둠은 μ΄κ²ƒμž…λ‹ˆλ‹€. Nextκ°€ λŒ€μƒμœΌλ‘œ ν•˜λŠ” μ‚¬μ΄νŠΈμ™€ 같은 κ°„λ‹¨ν•œ μ‚¬μ΄νŠΈμ˜ 경우 μ˜¨λΌμΈμ—μ„œ κ΅¬μž…ν•  수 μžˆλŠ” λŒ€λΆ€λΆ„μ˜ 미리 λ§Œλ“€μ–΄μ§„ html ν…Œλ§ˆλŠ” μˆœμˆ˜ν•œ htmlκ³Ό cssλ₯Ό μ‚¬μš©ν•˜μ—¬ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. λ”°λΌμ„œ HTML을 λ°˜μ‘ ꡬ성 μš”μ†Œλ‘œ 자λ₯΄κ³  μ μ ˆν•œ νŽ˜μ΄μ§€ 폴더에 λ„£μœΌλ©΄ μ™„λ£Œλ©λ‹ˆλ‹€.

λ‚΄ ν”„λ‘œμ νŠΈμ— Nextλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άμ§€λ§Œ κΈ°μ„± CSSλ₯Ό μ–΄λ–»κ²Œλ“  ν™œμš©ν•  수 μ—†λ‹€λ©΄ 거래 차단기가 될 κ²ƒμž…λ‹ˆλ‹€. 이 μ‚¬μš© 사둀에 λŒ€ν•œ μ†”λ£¨μ…˜μ΄λ‚˜ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

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

  • $#$ /pages #$ 폴더와 같은 μˆ˜μ€€μ— /static 폴더λ₯Ό λ§Œλ“­λ‹ˆλ‹€.
  • ν•΄λ‹Ή 폴더에 .css νŒŒμΌμ„ λ„£μŠ΅λ‹ˆλ‹€.
  • νŽ˜μ΄μ§€ ꡬ성 μš”μ†Œμ—μ„œ Head λ₯Ό κ°€μ Έμ˜€κ³  CSS에 <link /> λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
import React from 'react';
import Head from 'next/head';

export default () => (
  <div>
    <Head>
      <title>My styled page</title>
      <link href="/static/styles.css" rel="stylesheet" />
    </Head>
    <p className="some-class-name">
      Hello world!
    </p>
  </div>
)

그게 λ‹€μ•Ό, 이런 μ‹μœΌλ‘œ Next.jsλŠ” νŽ˜μ΄μ§€ ν—€λ“œμ— 링크 νƒœκ·Έλ₯Ό λ Œλ”λ§ν•΄μ•Ό ν•˜κ³  λΈŒλΌμš°μ €λŠ” CSSλ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ—¬ μ μš©ν•©λ‹ˆλ‹€.

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

  • $#$ /pages #$ 폴더와 같은 μˆ˜μ€€μ— /static 폴더λ₯Ό λ§Œλ“­λ‹ˆλ‹€.
  • ν•΄λ‹Ή 폴더에 .css νŒŒμΌμ„ λ„£μŠ΅λ‹ˆλ‹€.
  • νŽ˜μ΄μ§€ ꡬ성 μš”μ†Œμ—μ„œ Head λ₯Ό κ°€μ Έμ˜€κ³  CSS에 <link /> λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
import React from 'react';
import Head from 'next/head';

export default () => (
  <div>
    <Head>
      <title>My styled page</title>
      <link href="/static/styles.css" rel="stylesheet" />
    </Head>
    <p className="some-class-name">
      Hello world!
    </p>
  </div>
)

그게 λ‹€μ•Ό, 이런 μ‹μœΌλ‘œ Next.jsλŠ” νŽ˜μ΄μ§€ ν—€λ“œμ— 링크 νƒœκ·Έλ₯Ό λ Œλ”λ§ν•΄μ•Ό ν•˜κ³  λΈŒλΌμš°μ €λŠ” CSSλ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ—¬ μ μš©ν•©λ‹ˆλ‹€.

μ™€μš°, λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€ :). νš¨κ³Όκ°€μžˆλ‹€! 단 ν•˜λ‚˜μ˜ 걸림돌이 μžˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€λ₯Ό 처음 λ‘œλ“œν•  λ•Œ λͺ¨λ“  것이 μ œλŒ€λ‘œ λ Œλ”λ§λ˜κΈ° 직전에 μŠ€νƒ€μΌμ΄ μ§€μ •λ˜μ§€ μ•Šμ€ html이 κΉœλ°•μž…λ‹ˆλ‹€. λ°˜μ‘ ν›„ λ‘œλ“œλœ css λ˜λŠ” js νŒŒμΌμ—μ„œ 온 것인지 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

μ–΄μ¨Œλ“  λ‚˜λŠ” λ„ˆν¬λ“€μ΄ ν•˜λŠ” 일에 μ ˆλŒ€μ μœΌλ‘œ 감λͺ…을 λ°›μ•˜κ³  λΉ λ₯Έ 닡변에 λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

μ‹ κ²½ 쓰지 λ§ˆμ„Έμš”. 인덱슀 νŽ˜μ΄μ§€μ—μ„œλ„ css 및 js 링크가 μžˆλŠ” 헀더 ꡬ성 μš”μ†Œλ₯Ό κ°€μ Έμ™”λŠ”λ° ν”Œλž˜μ‹œκ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€. λ˜ν•œ 액컀 νƒœκ·Έλ₯Ό 링크 ꡬ성 μš”μ†Œλ‘œ λ³€κ²½ν•˜λ©΄ 남은 점프가 μ œκ±°λ©λ‹ˆλ‹€. 단점은 Link ꡬ성 μš”μ†Œκ°€ μžμ‹μ—μ„œ λͺ¨λ“  html νƒœκ·Έ(μ•„μ΄μ½˜ ν΄λž˜μŠ€κ°€ μžˆλŠ” span νƒœκ·Έ λ“±)λ₯Ό μ œκ±°ν•˜μ—¬ ν…μŠ€νŠΈλ§Œ λ‚¨κ²Œ λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 이 μ‚¬μš© 사둀가 μ •ν™•ν•˜κ³  μ΅œμ ν™”λœ 것과 λ°˜λŒ€λΌλŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ λΉ λ₯΄κ³  λ”λŸ¬μš΄...좔함에 μ˜μ§€ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— 정말 μœ μš©ν•©λ‹ˆλ‹€. :)

λ”°λΌμ„œ 미리 λ§Œλ“€μ–΄μ§„ html ν…Œλ§ˆλ₯Ό ν†΅ν•©ν•˜λŠ” μ›Œν¬ν”Œλ‘œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. 정적 폴더λ₯Ό λ§Œλ“€κ³  ν…œν”Œλ¦Ώμ—μ„œ λͺ¨λ“  js/css/img νŒŒμΌμ„ 볡사/μ΄λ™ν•©λ‹ˆλ‹€.
  2. ꡬ성 μš”μ†Œκ°€ μžˆλŠ” page.js 파일 λ§Œλ“€κΈ°
  3. ꡬ성 μš”μ†Œμ— html을 μΆ”κ°€ν•˜κ³  λ°˜μ‘μ„ μ€€μˆ˜ν•˜λ„λ‘ μˆ˜μ •ν•©λ‹ˆλ‹€.
    3.1. Head νƒœκ·Έλ₯Ό μΆ”κ°€ν•˜κ³  원본 html의 λͺ¨λ“  css/js νŒŒμΌμ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
    3.2. μƒˆ 정적 폴더와 μΌμΉ˜ν•˜λ„λ‘ ν•΄λ‹Ή 파일의 경둜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
    3.3. head νƒœκ·Έ μ•„λž˜μ— html 볡사/λΆ™μ—¬λ„£κΈ°
    3.4 λ‹«νžˆμ§€ μ•Šμ€ html νƒœκ·Έ(링크, μž…λ ₯ 및 img νƒœκ·Έ 포함) λ‹«κΈ° λ˜λŠ” 자체 λ‹«κΈ°
    3.5. class="의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ₯Ό className="으둜 μ°ΎκΈ°/λ°”κΎΈκΈ°
    3.6. λͺ¨λ“  HTML 주석 제거

@manolkalinov μ‰½κ²Œ μ°Έμ‘°ν•  수 μžˆλ„λ‘ μ½”λ“œλ₯Ό μΆ”κ°€ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? μ›Œν¬ν”Œλ‘œλ₯Ό μž‘μ„±ν•˜μ…¨λ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μƒ˜ν”Œ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ¬Έμ œκ°€ λ°œμƒν•  경우 더 μ‰½κ²Œ λ”°λ₯΄κ³  디버그할 수 μžˆμŠ΅λ‹ˆλ‹€.

head νƒœκ·Έμ— CSSλ₯Ό μΆ”κ°€ν•˜λ©΄ ν™•μ‹€νžˆ μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그것은 μΌμ’…μ˜ 해킀이며 postcss λ˜λŠ” sass 와 같은 것을 μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ? κΈ°μ‘΄ CSS μŠ€νƒ€μΌμ„ 맀λ ₯적인 JSON 객체둜 λ³€ν™˜ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ””μžμ΄λ„ˆκ°€ glamor λ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€μ˜ μŠ€νƒ€μΌμ„ μ§€μ •ν•˜λŠ” 것도 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 더 λ‚˜μ€ 방법이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
그건 κ·Έλ ‡κ³ , CSS λͺ¨λ“ˆκ³Ό λΉ„κ΅ν•˜μ—¬ glamor μ‚¬μš©μ˜ 이점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@andyhu λŠ” https://github.com/zeit/next.js#faq μ—μ„œ glamor μ‚¬μš©μ˜ 이점에 λŒ€ν•΄ μ½μ–΄λ³΄μ„Έμš”.
postcss λ˜λŠ” sass 에 λŒ€ν•΄ webpack ꡬ성을 μ‚¬μš©μž μ •μ˜ν•˜λ©΄ 이λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€(https://github.com/zeit/next.js/pull/222). next λ₯Ό μ‹€ν–‰ν•˜κΈ° 전에 μ΄λŸ¬ν•œ νŒŒμΌμ„ CSS둜 μ»΄νŒŒμΌν•˜μ‹­μ‹œμ˜€.

ν•΄κ²°λ˜μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆλŠ” 경우 λ‹€μ‹œ μ—¬μ‹­μ‹œμ˜€. @sergiodxa λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€!

@nkzawa μ›ΉνŒ© ꡬ성 μ‚¬μš©μž 지정을 μ‚¬μš©ν•˜λ―€λ‘œ ν”„λ‘œμ νŠΈμ—μ„œ 덜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 여기에 λ‚΄ μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
next.config.js

/* eslint-disable */

export default {
    webpack: (webpackConfig) => {
        const newConfig = { ...webpackConfig };
        newConfig.module.preloaders.push({
            test: /\.less$/,
            loader:'style-loader!css-loader!less-loader'
        });
        return newConfig;
    },
    cdn: false
}

그러면 더 적은 파일 import './index.less' 이 ν•„μš”ν•˜μ§€λ§Œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (1:4)

less , less-loader , css-loader , style-loader λ₯Ό μ„€μΉ˜ν–ˆλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€. 미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

당신은 μ‹œλ„ν•΄μ•Όν•©λ‹ˆλ‹€

config.module.rules.push({
      test: /\.less$/,
      use: [
        'style-loader',
        { loader: 'css-loader', options: { importLoaders: 1 } },
        'less-loader'
      ]
    })

@kimown less 파일 κ°€μ Έμ˜€κΈ°μ— μ„±κ³΅ν•˜μ…¨λ‚˜μš”? κ·Έλ ‡λ‹€λ©΄ μ–΄λ–»κ²Œ ν–ˆλŠ”μ§€ κ³΅μœ ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

@sergiodxa node_modules μ—μ„œ CSSλ₯Ό μ–΄λ–»κ²Œ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆκΉŒ?

npm νŒ¨ν‚€μ§€μ—μ„œ CSSλ₯Ό κ°€μ Έμ˜€λŠ” 것과 κ΄€λ ¨ν•˜μ—¬ 이 질문이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

예: rc-μŠ¬λΌμ΄λ”

import 'rc-slider/assets/index.css'

이에 λŒ€ν•œ 닡이 μžˆμ—ˆμŠ΅λ‹ˆκΉŒ? @notrab

@notrab
이 μ‹œλ„

루트 λ˜λŠ” _document ꡬ성 μš”μ†Œμ—μ„œ

import stylesheet from 'rc-slider/assets/index.css';

<div className='root'>
    <style dangerouslySetInnerHTML={{ __html: stylesheet }} />
    <Main />
</div>

@saadbinsae λ‚˜λŠ” 이것을 μ‹œλ„ν–ˆλ‹€. 자체 ꡬ성 μš”μ†Œ 및 νŽ˜μ΄μ§€μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 인라인 λŒ€μ‹  webpackκ³Ό ν•¨κ»˜ λ²ˆλ“€λ‘œ λ§Œλ“€κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@schoenwaldnils κ·Έλ ‡κ²Œ ν•˜λ €κ³  ν–ˆμ§€λ§Œ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄ 이해에 따라 μš°λ¦¬λŠ” μ„œλ²„ μΈ‘ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•˜κ³  μžˆμœΌλ―€λ‘œ μ„œλ²„λŠ” CSSκ°€ 무엇인지 λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ CSS νŒŒμΌμ„ λ²ˆλ“€λ‘œ λ¬Άμ–΄ ν΄λΌμ΄μ–ΈνŠΈμ— 보낼 수 μ—†μŠ΅λ‹ˆλ‹€. html에 CSSλ₯Ό ν¬ν•¨μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€. 전체 μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ•‘μ„ΈμŠ€ν•˜λ €λ©΄ 루트 ꡬ성 μš”μ†Œμ— ν¬ν•¨ν•˜κ±°λ‚˜ μœ„μ—μ„œ @sergiodxa둜 ν‘œμ‹œλœ λŒ€λ‘œ 헀더에 μ—°κ²°ν•©λ‹ˆλ‹€.

@sergiodx μ ‘κ·Ό 방식을 μ‹œλ„ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 μ΅œμ‹  λ²„μ „μ˜ Next에도 계속 μ μš©λ©λ‹ˆκΉŒ?

@sergiodxa κ°μ‚¬ν•©λ‹ˆλ‹€. κ·Έλƒ₯ λ‚΄κ°€ μ°Ύκ³  μžˆμ—ˆλ‹€.

@sergiodxa 당신은 λ‹Ήμ‹ μ˜ λŒ€λ‹΅μ„ λ³€κ²½ν•΄μ•Όν•©λ‹ˆλ‹€. 그것은 정적 이 μ•„λ‹ˆλ‹€! 그것은 μ •μ μ΄μ–΄μ•Όν•©λ‹ˆλ‹€

CSS κ°€μ Έμ˜€κΈ° μ‚¬μš©μ€ 이제 https://github.com/zeit/next-plugins λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•©λ‹ˆλ‹€.

1λ…„ 된 문제 범프에 λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. λΆ„λͺ…νžˆ μ‚¬λžŒλ“€μ€ Google을 톡해 μ—¬κΈ°κΉŒμ§€ μ™”μŠ΅λ‹ˆλ‹€.

CSS κ°€μ Έμ˜€κΈ° μ‚¬μš©μ€ 이제 https://github.com/zeit/next-plugins λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•©λ‹ˆλ‹€.

1λ…„ 된 문제 범프에 λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. λΆ„λͺ…νžˆ μ‚¬λžŒλ“€μ€ Google을 톡해 μ—¬κΈ°κΉŒμ§€ μ™”μŠ΅λ‹ˆλ‹€.

μ„€λ§ˆ. node_moduleμ—μ„œ 직접 CSSλ₯Ό κ°€μ Έμ˜€λŠ” μ‰¬μš΄ 방법을 찾지 λͺ»ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이것은 μ˜λ„μ μœΌλ‘œ μ„€κ³„λœ κ²ƒμž…λ‹ˆκΉŒ?

CSS κ°€μ Έμ˜€κΈ° μ‚¬μš©μ€ 이제 https://github.com/zeit/next-plugins λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•©λ‹ˆλ‹€.
1λ…„ 된 문제 범프에 λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. λΆ„λͺ…νžˆ μ‚¬λžŒλ“€μ€ Google을 톡해 μ—¬κΈ°κΉŒμ§€ μ™”μŠ΅λ‹ˆλ‹€.

μ„€λ§ˆ. node_moduleμ—μ„œ 직접 CSSλ₯Ό κ°€μ Έμ˜€λŠ” μ‰¬μš΄ 방법을 찾지 λͺ»ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이것은 μ˜λ„μ μœΌλ‘œ μ„€κ³„λœ κ²ƒμž…λ‹ˆκΉŒ?

λ‹€μŒ 버전 7 μ΄ν›„λŠ” μ•„λ‹ˆμ§€λ§Œ 이미 μ‚΄νŽ΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ? 이전보닀 훨씬 μ‰½μŠ΅λ‹ˆλ‹€ ;)

@mtrabelsi κ°€ λ§‰ν˜”κΈ° λ•Œλ¬Έμ— Next.js 7의 λ…Έλ“œ λͺ¨λ“ˆμ—μ„œ CSSλ₯Ό 직접 κ°€μ Έμ˜€λŠ” 방법을 λͺ‡ 가지 예λ₯Ό λ“€μ–΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? λ…Έλ“œ λͺ¨λ“ˆμ—μ„œ 일뢀 μŠ€νƒ€μΌμ„ 가져와야 ν•˜λŠ”λ° μž‘λ™ν•˜λŠ” μ†”λ£¨μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

copy-webpack-plugin을 μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
μ›ΉνŒ© ꡬ성(next.config.js)μ—μ„œ:

config.plugins.push( new CopyWebpackPlugin([ { from: path.join(__dirname,'node_modules/react-datepicker/dist/react-datepicker.css'), to: path.join(__dirname, 'static/react-datepicker.css') } ]) );

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ CSS μˆ˜μ •μ— λŒ€ν•œ μˆ˜μ • 사항을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/AmanAgarwal041/next-css-fix

더 κ°„λ‹¨ν•œ 방법이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

κ°„λ‹¨ν•œ 3단계:

  1. next-css ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜:
npm install --save @zeit/next-css
  1. λ‹€μŒ μ½˜ν…μΈ λ‘œ 루트 디렉터리 next.config.js에 μƒμ„±ν•©λ‹ˆλ‹€.
// next.config.js 
const withCSS = require('@zeit/next-css')

module.exports = withCSS({
  cssLoaderOptions: {
    url: false
  }
})
  1. 이제 λ‹€μŒκ³Ό 같이 node_modulesμ—μ„œ μŠ€νƒ€μΌμ‹œνŠΈλ₯Ό κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
import 'bootstrap-css-only/css/bootstrap.min.css';

_μ°Έκ³ : λ‹€μŒ v 8+ μ‚¬μš©

λ°°κ²½:
node_module둜 μ„€μΉ˜λœ CSSλ₯Ό λ‹¨μˆœνžˆ κ°€μ Έμ˜€λ €κ³  λͺ‡ μ‹œκ°„μ„ λ³΄λƒˆκ³  λ‹€μ–‘ν•œ μ†”λ£¨μ…˜μ€ λŒ€λΆ€λΆ„ ν•΄ν‚Ήλœ ν•΄κ²° λ°©λ²•μ΄μ§€λ§Œ μœ„μ— ν‘œμ‹œλœ κ²ƒμ²˜λŸΌ κ°„λ‹¨ν•œ μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.
핡심 νŒ€ ꡬ성원 쀑 ν•œ λͺ…이 μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€. https://spectrum.chat/next-js/general/ignoring-folders-files-specifically-fonts~4f68cfd5-d576-46b8-adc8-86e9d7ea0b1f

λˆ„κ΅°κ°€ @sergiodxa 의 닡변을 μ‚¬μš©ν•˜λŠ” 경우 폴더 이름을 static ν•˜λ©΄ 링크 νƒœκ·ΈλŠ” static λ₯Ό μ°Έμ‘°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ˜‚ 곡식 λ¬Έμ„œλ³΄λ‹€ GitHub 문제λ₯Ό 더 많이 μ½λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(https://github.com/zeit/next-plugins/tree/master/packages/next-css) πŸ˜‚

@mtrabelsi , 이 λ¬Έμ œλŠ” λ¬Έμ„œλ³΄λ‹€ 더 κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. cssλ₯Ό 직접 μ‚¬μš©ν•˜λ €λŠ” 경우(예: import 'bootstrap-css-only/css/bootstrap.min.css'; ) @Vrq 의 닡변을 찾을 λ•ŒκΉŒμ§€ λ¬Έμ„œμ— 언급이 μ—†μŠ΅λ‹ˆλ‹€.

@timneutkens

λ‚΄ μžμ‹ μ˜ 일반 CSS νŒŒμΌμ„ κ°€μ Έμ˜€λ €κ³  ν•©λ‹ˆλ‹€. κ²°κ΅­ https://github.com/zeit/next-plugins/tree/master/packages/next-css 의 μ„€λͺ…μ„œλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜€λŠ” μ˜¬λ°”λ₯Έ λ°©λ²•μž…λ‹ˆλ‹€.
λ˜λŠ” <Head> νƒœκ·Έμ˜ 링크λ₯Ό 톡해 κ°€μ Έμ˜€λŠ” 2017λ…„ @sergiodxa 닡변을 μ‚¬μš©ν•˜λŠ” μ˜¬λ°”λ₯Έ λ°©λ²•μž…λ‹ˆκΉŒ?

λ‚΄κ°€ 찾은 것은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • 두 방법 λͺ¨λ‘ νŽ˜μ΄μ§€λ₯Ό 직접 λ‘œλ“œν•  λ•Œ μž‘λ™ν•©λ‹ˆλ‹€(URL둜 직접 이동).
  • Router.pushλ₯Ό μ‚¬μš©ν•˜μ—¬ 처음으둜 νŽ˜μ΄μ§€λ₯Ό 탐색할 λ•Œλ§Œ Sergios 방식이 μž‘λ™ν•©λ‹ˆλ‹€(next-css λ¬Έμ„œμ˜ 방식을 μ‚¬μš©ν•˜λ©΄ CSSκ°€ λ‘œλ“œλ˜μ§€ μ•ŠμŒ).
  • Sergio의 방식에 λŒ€ν•œ μœ μΌν•œ λ¬Έμ œλŠ” Router.pushλ₯Ό μ‚¬μš©ν•˜μ—¬ 처음으둜 νŽ˜μ΄μ§€μ— 갈 λ•Œ μŠ€νƒ€μΌμ΄ μ§€μ •λ˜μ§€ μ•Šμ€ html의 ν”Œλž˜μ‹œκ°€ μ—¬μ „νžˆ ν‘œμ‹œλœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

_document νŒŒμΌμ— λ‚΄ CSSλ₯Ό 포함할 ν•„μš” 없이 이 ν”Œλž˜μ‹œλ₯Ό ν”Όν•˜λŠ” 방법을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

κ°μ‚¬ν•©λ‹ˆλ‹€.

Next.js에 μ œκ³΅λ˜λŠ” CSS 지원은 #8626을 μ°Έμ‘°ν•˜μ„Έμš”!

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