Next.js: CSS ์ฒญํฌ์— ๋ณต์ œ ๋œ ์Šคํƒ€์ผ์€ ์†Œ์Šค ์ฃผ๋ฌธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 04์›” 30์ผ  ยท  42์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vercel/next.js

๋ฒ„๊ทธ ์‹ ๊ณ 

๋ฒ„๊ทธ ์„ค๋ช…

์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ ํ•  ๋•Œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์Šคํƒ€์ผ์ด ๊ฐ ๊ด€๋ จ CSS ํŽ˜์ด์ง€ ์ฒญํฌ์— ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ๊ฐ์  ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ( some-component ๋ฐ initial-page-component-override ๋Š” ์ดˆ๊ธฐ ํŽ˜์ด์ง€์˜ DOM์—์„œ ๋™์ผํ•œ ์š”์†Œ์— ์ ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค) :

initial-page.chunk.css

// component styles
.some-component { margin-bottom: 10px; }

// page specific override
.initial-page-component-override { margin-bottom: 20px; }

second-page.chunk.css

// component styles
.some-component { margin-bottom: 10px; }

second-page.chunk.css๊ฐ€ DOM์— ์ถ”๊ฐ€๋˜๋ฉด ๊ตฌ์„ฑ ์š”์†Œ ์Šคํƒ€์ผ์ด ์ดˆ๊ธฐ ํŽ˜์ด์ง€์— ์ •์˜ ๋œ ๋ชจ๋“  ํŽ˜์ด์ง€ ํŠน์ • ์Šคํƒ€์ผ์˜ ๋งจ ์œ„์— ๋‹ค์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์žฌ์ •์˜๊ฐ€ ์†์‹ค๋˜๊ณ  ์ž˜๋ชป๋œ ์—ฌ๋ฐฑ์ด ์ด์ œ ์ดˆ๊ธฐ ํŽ˜์ด์ง€์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. NB ์ด๊ฒƒ์€ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ํ”„๋กœ๋•์…˜์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ํ•˜๋ ค๋ฉด

๋™์ž‘์„ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„, ์ฝ”๋“œ ์กฐ๊ฐ ๋˜๋Š” ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  1. ์ฒดํฌ ์•„์›ƒ https://github.com/petewarman/nextjs-css-module-issue
  2. npm i , npm run build , npm start
  3. ์—ฐ๋‘์ƒ‰ ๋ฒ„ํŠผ ์œ„๋กœ ์ปค์„œ๋ฅผ ๊ฐ€์ ธ๊ฐ‘๋‹ˆ๋‹ค.
  4. ๋‘ ๋ฒˆ์งธ ํŽ˜์ด์ง€์˜ ์Šคํƒ€์ผ ์‹œํŠธ๊ฐ€ ๋ฏธ๋ฆฌ๋กœ๋“œ๋˜๋ฉด ๋ถ„ํ™์ƒ‰์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์Šคํƒ€์ผ ์„ ์–ธ์€ ์ปดํŒŒ์ผ ๋œ ์Šคํƒ€์ผ ์‹œํŠธ์—์„œ ์ค‘๋ณต๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ ์Šคํƒ€์ผ์€ ํŽ˜์ด์ง€ ๋ณ„ ์Šคํƒ€์ผ ์œ„์—๋กœ๋“œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ž์ฒด ์ฒญํฌ์—์„œ?).

์‹œ์Šคํ…œ ์ •๋ณด

  • ์šด์˜์ฒด์ œ : macOS
  • Next.js ๋ฒ„์ „ : 9.3.6
  • Node.js ๋ฒ„์ „ : 10.16.3

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ •ํ™•ํžˆ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/zeit/next.js/issues/11946#issuecomment -615298112

๋ชจ๋“  42 ๋Œ“๊ธ€

์ •ํ™•ํžˆ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/zeit/next.js/issues/11946#issuecomment -615298112

์—ฌ๊ธฐ์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์—ฌ๊ธฐ์— ๋‚ด ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ–ˆ๋‹ค : https://github.com/zeit/next.js/pull/11901#issuecomment -614644961

์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๊ฒƒ์„ ํ”„๋กœ๋•์…˜์— ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
9.3.7-canary.9 ์—์„œ ํ…Œ์ŠคํŠธ ๋จ

์•ˆ๋…•ํ•˜์„ธ์š”.
์ƒํƒœ : v9.3.7-canary.11 ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

monorepo์—์žˆ๋Š” ๊ณต์œ  ๊ตฌ์„ฑ ์š”์†Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜ํ–ฅ์„์ฃผ๋Š” ์•ฑ์˜ ๋ชจ๋“  ์Šคํƒ€์ผ์€ ์•ฑ CSS ํŒŒ์ผ์˜ ์Šคํƒ€์ผ์˜ ํŠน์ˆ˜์„ฑ์ด ๋” ๋†’์œผ๋ฏ€๋กœ ์šฐ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ๊ดœ์ฐฎ์•„ ๋ณด์ด์ง€๋งŒ ํ”„๋กœ๋•์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

(์šฐ๋ฆฌ๋Š” @zeit/next-sass ์™€ ํ•จ๊ป˜ SCSS ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)

image

image

@ zeit / next-sass ๋˜๋Š” @ zeit / next-css๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ชจ๋“  ๊ฒƒ์ด ์ˆœ์„œ, ์„ ํ˜ธ๋„ ๋ฐ ๋ฉ์–ด๋ฆฌ ์‚ฌ์ด์˜ ์ค‘๋ณต์œผ๋กœ ๊ฝค ๊ดœ์ฐฎ ์•˜์Šต๋‹ˆ๋‹ค. :์ƒ๊ฐ:

๋‚˜์—๊ฒŒ ์ง„์งœ ๋ฌธ์ œ๋Š” nextjs๋ฅผ 9.3์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  CSS ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• (next-sass ๋ฐ built-in)์„ ๋ชจ๋‘ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์Šคํƒ :
1) CSS ๋ชจ๋“ˆ
2) SCSS
3) @use ๊ฐ€์ ธ ์˜ค๊ธฐ ๊ธฐ๋Šฅ์ด์žˆ๋Š” Dart-Sass

๋งŽ์€ ๋ณ€ํ˜•์„ ์‹œ๋„ํ–ˆ๊ณ  ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (์Šคํƒ€์ผ ์ค‘๋ณต ์—†์Œ).

1) package.json :

"@zeit/next-css": "^1.0.1",
"@zeit/next-sass": "^1.0.1",
"next": "9.2.1", (9.4.1 is current)
"node-sass": "npm:[email protected]", (this is dart sass, but can be used default)

2) next.config.js

const path = require('path')
const withSass = require('@zeit/next-sass')
const withCSS = require('@zeit/next-css')
const withBundleAnalyzer = require('@next/bundle-analyzer')({ // Optional, of course
  enabled: process.env.ANALYZE === 'true',
})

module.exports = withBundleAnalyzer(
  withCSS(
    withSass({
      cssModules: true,
      sassLoaderOptions: {
        // Resolving SASS absolute imports
        includePaths: [path.resolve(__dirname, 'src')],
      },
      cssLoaderOptions: {
        importLoaders: 2,
        localIdentName:
          process.env.NODE_ENV === 'production'
            ? '[hash:base64]'
            : '[name]__[local]__[hash:base64:5]',
      },
      webpack(config, options) {
        // Resolving absolute imports
        config.resolve.modules.push(path.join(__dirname, 'src'))

        // Make global styles work
        config.module.rules.forEach(rule => {
          if (rule.test && rule.test.toString().includes('.scss')) {
            rule.rules = rule.use.map(useRule => {
              if (typeof useRule === 'string') {
                return {
                  loader: useRule,
                }
              }

              if (useRule.loader.startsWith('css-loader')) {
                return {
                  oneOf: [
                    {
                      test: new RegExp('.module.scss$'),
                      loader: useRule.loader,
                      options: useRule.options,
                    },
                    {
                      loader: useRule.loader,
                      options: {},
                    },
                  ],
                }
              }
              return useRule
            })
            delete rule.use
          }
        })

        return config
      },
    }),
  ),
)

3) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธ€๋กœ๋ฒŒ (๋ชจ๋“ˆ์ด ์•„๋‹Œ) ์Šคํƒ€์ผ ๊ฐ€์ ธ ์˜ค๊ธฐ :

index.scss :

...
<strong i="19">@import</strong> '~emoji-mart/css/emoji-mart.css';
...

๋ˆ„๊ตฐ๊ฐ€ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ์‹œ๋„ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

.other-page__component-override { background: pink; }

์ด๊ฒƒ์œผ๋กœ :

.other-page .component-override { background: pink; }

๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€ ๋ณ„ ์Šคํƒ€์ผ์€ ํ•ด๋‹น ํŠน์ • ํŽ˜์ด์ง€์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค =).

์ด ๋ฒ„๊ทธ์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ css๋ฅผ ๋‚ด์žฅ css๋กœ ๋ณ€๊ฒฝํ–ˆ๋Š”๋ฐ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ CSR์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SSR์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด์žฅ CSS ์ง€์›๊ณผ ํ•จ๊ป˜ ๋‹ค์Œ 9.4.4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ํ”„๋กœ๋•์…˜์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ 9.4.4์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ. ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ์—์„œ๋งŒ

์ด๊ฒƒ์€ ๋‹ค์Œ 9.4.4์˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ๋“  ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

node-sass ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ์—์„œ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์‹œ๋„ํ•˜๊ณ  next.config.js ์ƒˆ sassOptions ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

module.exports = {
  ...,
  sassOptions: {
    outputStyle: 'expanded',
  },
}

์ฐธ์กฐ : outputStyle

next build ํ›„ CSS ํด๋ž˜์Šค ์ด๋ฆ„์„ ํ™•์ธํ•œ ํ›„ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

@ Howard86 ์„ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋นŒ๋“œ์—์„œ๋„ next-css์™€ next-sass๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (Next์˜ ๋‚ด์žฅ CSS ์ง€์›์ด ์•„๋‹ˆ๋ฉฐ์ด ๋ฌธ์ œ์— ์„ค๋ช… ๋œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ). ๋ณต์ œ๋Š” css๋กœ ๊ฐ€์ ธ์˜จ ์ˆœ์ˆ˜ CSS์—์„œ ์˜ค๋Š” ํด๋ž˜์Šค์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. sass ์Šคํƒ€์ผ์—์„œ ์˜ค์ง€ ์•Š๋Š” ๋ชจ๋“ˆ

@ Howard86 @ ์•Œ๋ ‰์‚ฐ๋“œ๋ฅด-marchina

๋‚˜๋Š” ๋‹ค์Œ 9.4.4์—์„œ ๋‚ด์žฅ CSS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜๋„ ๋‚˜์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. :์šธ์Œ ์†Œ๋ฆฌ:

๋‚˜๋Š” antd์™€ ๋‹ค์Œ ์ตœ์‹  ๐Ÿ˜ž๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ. css๋Š” dev์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ๋กœ๋“œ๋˜์ง€๋งŒ ์ œํ’ˆ์—์„œ๋Š” ์ผ๋ถ€ css ์ฒญํฌ๊ฐ€๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋„ ๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

prod ๋นŒ๋“œ์—์„œ ๋‹ค์Œ v9.5.1์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์œผ๋ฉฐ dev ๋นŒ๋“œ์—์„œ ์Šคํƒ€์ผ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๋Š” next.js์—์„œ css-modules๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค (์•„๋ฌด๋„ ์Šคํƒ€์ผ์—! important๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)

์ด ๋ฒ„๊ทธ๋Š” next.js์—์„œ css-modules๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค (์•„๋ฌด๋„ ์Šคํƒ€์ผ์—! important๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)

๊ธฐ๋ณธ ์Šคํƒ€์ผ์„ ์žฌ์ •์˜ํ•˜๋Š” ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ํŠน์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Button <-IconButton <-MoreSpecificButton๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ ์ข…์†์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Button์—๋Š” ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ „ํ™˜ ํ•  ๋•Œ ๋‹ค์‹œ๋กœ๋“œ๋˜๋Š” ์ž์ฒด ์Šคํƒ€์ผ์ด ์žˆ์œผ๋ฏ€๋กœ IconButton ๋ฐ MoreSpecificButton์˜ ์Šคํƒ€์ผ์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. IconButton๊ณผ ๊ฐ™์ด ์ •์˜์˜ ์Šคํƒ€์ผ์ด์žˆ๋Š” ๊ฒฝ์šฐ .className.className , ๊ทธ๋ฆฌ๊ณ  MoreSpecificButton๋Š” ๋“ฑ์˜ ์Šคํƒ€์ผ์ด .className.className ๋„ˆ๋ฌด ๋‹ค์Œ ๋ฒ„ํŠผ์„ ์˜ค๋ฒ„๋ผ์ด๋“œ (override)ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  IconButton ๋ฐ MoreSpecificButton ์Šคํƒ€์ผ์˜ ์ˆœ์„œ๊ฐ€ CSS์—์„œ ์ •ํ™•ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด MoreSpecificButton์˜ ์Šคํƒ€์ผ์€ ํ•ญ์ƒ IconButton์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

prod ๋นŒ๋“œ์—์„œ ๋‹ค์Œ v9.5.1์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์œผ๋ฉฐ dev ๋นŒ๋“œ์—์„œ ์Šคํƒ€์ผ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Tailwind, Bootstrap์— +1. ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ _document.js์˜ link rel์„ ํ†ตํ•ด ๋ชจ๋“  ์Šคํƒ€์ผ์„ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Tailwind์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ง€์ • CSS ๋นŒ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋งค์šฐ ์„ฑ๊ฐ€์‹œ๋‹ค.

๋‚˜๋Š” tailwind (์ผ๋ฐ˜ ์ „์—ญ CSS ๊ฐ€์ ธ ์˜ค๊ธฐ)์™€ ํ•จ๊ป˜ CSS ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ผ์ธ CSS๋Š”๋กœ๋“œ ์ˆœ์„œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ณต์ œ ์ค‘์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์Šคํƒ€์ผ์ด ๋‹ค๋ฅธ ์Šคํƒ€์ผ๋ณด๋‹ค ์šฐ์„ ํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„ ์ฐจ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/vercel/next-plugins/issues/238#issuecomment -432211871

์ด๊ฒƒ์€ ์ตœ์‹  Next.js ์นด๋‚˜๋ฆฌ์•„์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. next@^9.5.3-canary.7 ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์•Œ๋ ค์ฃผ์„ธ์š”!

์˜ˆ๋ฅผ ๋“ค์–ด ๋ผ์ธ ๋†’์ด, ๊ธ€๊ผด ๋‘๊ป˜, ๋ฐฐ๊ฒฝ์ƒ‰, ํ…Œ๋‘๋ฆฌ๊ฐ€ dev์™€ prod์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

@talaikis ๊ทธ๋Ÿผ ์™„์ „ํžˆ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐ๋ชจ๋กœ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”! ์ด ๋ณต์ œํ’ˆ์— ์ œ๊ณต๋œ ์ •ํ™•ํ•œ ์ฝ”๋“œ์™€ canary ์ง€๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ๊ณ ์น˜์ง€ ๋งŒ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ œ ๊ฒฝ์šฐ์—๋Š” Router.push( localhost : 3000 / # change ) coming from localhost : 3000` ๋ชจ๋“  ์Šคํƒ€์ผ ์‹œํŠธ๊ฐ€ ๋‹ค์‹œ๋กœ๋“œ๋˜์–ด ํ™”๋ฉด์ด ๊นœ๋ฐ•์ด๋Š” ์›์ธ์ด๋˜๋Š” ํ•ด์‹œ URL ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

9.5.3-canary.9 ์‹œ๋„ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@Timer ์‹คํ–‰ npm i :

image

๋‚˜๋Š” 9.5.3-canary.9 ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•ด์‹œ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ 9.5.2 ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ 9.5.3-canary.6 ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์„ ๋•Œ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์™€ ๊ฐ™์ด ํ•ด์‹œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด devtools ์ฝ˜์†”์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
9.5.3-canary.5 .

image

@fabinppk ๋ณต์ œ๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”!

์›๋ž˜ ๋ฌธ์ œ๊ฐ€ 9.5.3-canary.9 ์—์„œ ํ•ด๊ฒฐ ๋œ ๊ฒƒ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. @Timer ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

@petewarman์„ ํ™•์ธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@Timer ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ˆ˜์ •์ด ๊ดœ์ฐฎ๊ณ  devtools ์˜์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. : +1 :

์ด๊ฒƒ์ด 9.5.6-canary.11 ์—์„œ ์—ฌ์ „ํžˆ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ž˜์Šค๋Š” ์ฒญํฌ์—์„œ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

@glottonous ์ด ๋ฌธ์ œ์— ์–ธ๊ธ‰ ๋œ ๋ชจ๋“  ๋ฌธ์ œ๋Š” ํƒ€์ด๋จธ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹  : 9.5.5๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘Œ๐Ÿ‘Œ

@fabinppk 9.5.6-canary.11 ํ˜„์žฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@glottonous ๋ฒ„์ „ 9.5.6-canary.11 ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ •๋ง๋กœ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ์ด ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฝ๋‹ˆ ๋‹ค. : +1 :

nextjs 10์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ

๊ฐ™์€ ๋ฌธ์ œ 10.0.1

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐ๋ชจ๋กœ # 19055๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰