
์ค๋ ํ๋ก์ ํธ์์ styled-components๋ฅผ Next.js 15 ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ค๊ณ ํ์ต๋๋ค.
SSR๋ ์ ์ฉํ๊ณ ์ถ์ด์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๊ณ babel.config.js์ babel-plugin-styled-components๋ฅผ ์ค์ ํ์ต๋๋ค.
// babel.config.js
module.exports = {
presets: ['next/babel'],
plugins: [['styled-components', { ssr: true, displayName: true }]],
};
๊ทธ๋ฐ๋ฐ...
Error: Cannot require() ES Module babel.config.js in a cycle
ReferenceError: module is not defined
styled-components๋ฅผ ์ ์ฉํ์๋ง์ Next.js dev ์๋ฒ๊ฐ ๊นจ์ง๊ธฐ ์์ํ์ต๋๋ค.
Babel ์ค์ ์ ๋ชป ๋ถ๋ฌ์จ๋ค๊ฑฐ๋, module์ด undefined๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ๋ณต ๋ฐ์ํ๊ณ ,
.next/fallback-build-manifest.json๋ ์๋ค๊ณ ํ๋ฉฐ ์ปดํ์ผ๋ ์คํจํ์ต๋๋ค.
babel.config.js๋ CommonJS ํ์์ผ๋ก ์์ฑ๋์ด์ผ ํ์ง๋ง,
๋ด package.json์ "type": "module"์ด ์์๊ธฐ ๋๋ฌธ์ Next.js๋ ์ด ํ์ผ์ ESM์ผ๋ก ์ธ์ํ๊ฒ ๋จ.
.cjs ํ์ฅ์๋ฅผ ์จ๋ Next.js 15์์๋ babel.config.cjs๋ฅผ ์์ ์ง์ํ์ง ์์.
babel-plugin-styled-components ํจํค์ง๋ฅผ ์ค์นํ์ง ์์ ์ํ์์ Babel ํ๋ฌ๊ทธ์ธ์ ์ฐ๋ฉด ๋ ์๋ฌ ๋ฐ์.
โ ์ด๋์ ๋ ๊ผฌ์ด๊ธฐ ์์ํ์ต๋๋ค.
"type": "module" ์ ๊ฑฐ
babel.config.js์์ CommonJS(module.exports) ๋ช
ํํ ์ง์
.cjs๋ก ํ์ฅ์ ๋ฐ๊ฟ๋ณด๊ธฐ
cross-env ์ค์นํด์ NODE_OPTIONS ์ ๋ฌ
babel-plugin-styled-components ์ง์ ์ค์น
ํ์ง๋ง Next.js 15์์๋ Babel ๋ก๋๊ฐ .cjs, .mjs ํ์ผ ์์ฒด๋ฅผ ์์ ๊ฑฐ๋ถํ๊ธฐ ๋๋ฌธ์
๊ฒฐ๊ตญ Babel ์ค์ ๋ฐฉ์์ผ๋ก๋ styled-components๋ฅผ ์์ ์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค.
Next.js 12 ์ด์์์๋ ์ฌ์ค styled-components๋ฅผ Babel ์์ด๋ ์ค์ ํ ์ ์๋ค๋ ๊ฑธ ์๊ฒ ๋์ต๋๋ค.
babel.config.js ์์ ์ญ์
next.config.js ์๋ก ์์ฑ ํ ์๋ ์ค์ ์ถ๊ฐ
/** @type {import('next').NextConfig} */
const nextConfig = {
compiler: {
styledComponents: true,
},
};
module.exports = nextConfig;
package.json์์ "type": "module" ์ ๊ฑฐ
eslint.config.js์์ globals: globals.node๋ก ์์ ํด ESLint ์ค๋ฅ ํด๊ฒฐ
dev ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ ์ ์ง ("dev": "next dev")
styled-components SSR ๋ฐ displayName ์ ์ฉ๋จ
hydration mismatch ํด๊ฒฐ
Babel ๊ด๋ จ ์๋ฌ ์ฌ๋ผ์ง
ESLint ๊ฒฝ๊ณ ๋ ์ ๋ฆฌ๋จ
Next.js 12 ์ด์์์๋ Babel ์์ด๋ styled-components์ SSR ๊ธฐ๋ฅ์ ์ง์ํ๋ฏ๋ก compiler.styledComponents: true ์ค์ ๋ง์ผ๋ก ์ถฉ๋ถํจ
"type": "module"์ ์ฌ์ฉํ ๊ฒฝ์ฐ Babel ์ค์ ์ ๋ ๋ณต์กํด์ง๋ฏ๋ก ๋ช
ํํ ๊ธฐ์ค์ผ๋ก CommonJS / ESM ๊ตฌ๋ถ ํ์
Babel ์ค์ ์ ๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ํผํ๋ ๊ฒ๋ ์ ์ง๋ณด์์ ์ข์
styled-components๋ฅผ Next.js์์ ์ธ ๋ ๋จผ์ next.config.js์์ compiler.styledComponents๋ฅผ ์ผ๋ ๋ฐฉ์๋ถํฐ ์๋ํด๋ณด๋ ๊ฒ ํจ์ฌ ์์ ํ๋ค๋ ๊ฑธ ๋ฐฐ์ ๋ค!