[Next.js] Turbopack์์ SVG ๊ด๋ จ Element type is invalid: expected a string ์๋ฌ ํด๊ฒฐ
๐ ๋ค์ด๊ฐ๋ฉฐ
Next.js 13 ๋ฒ์ ์ดํ์๋ Rust ์ธ์ด๋ก ๊ฐ๋ฐ๋ Turbopack์ด ๋์ ๋์์ต๋๋ค.
Next 14 ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์งํํ๊ณ Turbopack์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํํ์ ๋ ๋ง์ดํ ๋ฌธ์ ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค.
๋ฌธ์ ๋ฐ์ โ
Turbopack์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํํ์ ์๋์ ๊ฐ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด ์ค๋ฅ์ ๋ํด ๊ฒ์ํด ๋ณด๋ "์ปดํฌ๋ํธ์ ์ด๋ฆ์ด ์๋ชป๋์๊ฑฐ๋, import ๊ฒฝ๋ก๊ฐ ์๋ชป ์ ๋ ฅ๋์์ ๋ ๋ฐ์ํ๋ค"๋ ์ค๋ช ์ ์ฐพ์ ์ ์์์ต๋๋ค.
์ด์ ๋ฐ๋ผ import ๋ ๋ถ๋ถ์ ์ ํ์ธํด ๋ณด๋ผ๋ ์กฐ์ธ์ด ์์์ต๋๋ค.
๊ทธ๋ฌ๋, ์ ์ฝ๋์์๋ import๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก๊ธฐ ๋๋ฌธ์ ์์ ํ ๋ถ๋ถ์ด ์์์ต๋๋ค.
๋ฐ๋ผ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ค์ ํ์ธํด ๋ณธ ๊ฒฐ๊ณผ 'DarkModeBtn' ์ปดํฌ๋ํธ์์ ๋ฐ์ํ์์ ์ ์ ์์์ต๋๋ค.
์ด์ ๋ฐ๋ผ DarkModeBtn์ด import ๋ ๋ถ๋ถ์ ์ฃผ์ ์ฒ๋ฆฌํด ๋ณด์๊ณ , ์ด๋ก ์ธํด ์๋ฌ๊ฐ ์ฌ๋ผ์ก์์ ํ์ธํ ์ ์์์ต๋๋ค.
๋ ์์ธํ ์ดํด๋ณธ ๊ฒฐ๊ณผ, DarkModeBtn ์ปดํฌ๋ํธ์์ svg๋ฅผ ์ฌ์ฉํ๊ณ ์์๊ณ , Next.js์์ svg๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ถ๊ฐ ์ค์ ์ ํ์์ต๋๋ค.
์ด๋ '@svgr/webpack'์ ์ฌ์ฉํ์ฌ svg๋ฅผ ํํํ๊ณ ์์๊ณ , '@svgr/webpack'์ ๋ํ ์ค์ ๋ next.config.js์์ ์๋์ ๊ฐ์ด ์ถ๊ฐํด ๋์์ต๋๋ค.
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
return config;
},
์ด๋ฌํ ์ค์ ์ webpack์ ๋ง์ถฐ์ง ๊ฒ์ด์๊ธฐ์, Turbopack์ ์ฌ์ฉํ๋ฉด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ์ถ์ ํ๊ฒ ๋์์ต๋๋ค.
๋ฌธ์ ํด๊ฒฐ โ
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์๋ณด๋ ์ค, ๋คํํ๋ next.js์ turbo์ github์์ ๋์ผํ ์ด์๋ฅผ ๊ฒช๊ณ ์๋ ์ฌ๋๋ค์ ๊ธ์ ๋ฐ๊ฒฌํ ์ ์์์ต๋๋ค.
https://github.com/vercel/turbo/issues/4832
https://github.com/vercel/next.js/issues/48140
์ ์ด์๋ค์ ์ฐธ์กฐํ์ฌ ํ์ฌ ํ๋ก์ ํธ์ next.config.js์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.
module.exports = {
// output: 'export',
reactStrictMode: true,
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
return config;
},
compiler: {
// ssr and displayName are configured by default
styledComponents: true,
},
// ์ถ๊ฐ๋ ๋ถ๋ถ
experimental: {
turbo: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
},
};
์ด๋ ๊ฒ Turbopack์ ์ํ ์ถ๊ฐ ์ค์ ์ ํด์ฃผ์์ต๋๋ค.
next dev --turbo๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํํ๋ ์ค๋ฅ๊ฐ ์ฌ๋ผ์ก์ต๋๋ค.
์ป์ ์ ๐
Next.js 13 ๋ฒ์ ์ดํ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ๋ํด ์ฐธ๊ณ ์๋ฃ๊ฐ ๋ง์ง ์์, ์ฃผ๋ก Github ์ด์๋ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๊ฒ ๋์์ต๋๋ค.
์ด๋ฐ ์ต๊ด์ด ๊ธฐ๋ฅด๊ฒ ๋๋ ์ ์ตํ ๊ฒฝํ์ธ ๊ฒ ๊ฐ์ต๋๋ค.