next.config.js ๋์ next.config.ts๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
ํ์ฌ ์ด๋ค typescript ์์ ๋ ๊ตฌ์ฑ ํ์ผ์์ typescript๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๊ฐ๋ฅํฉ๋๊น?
@resir014
์ด์ ๊ฐ์ ์์ ์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ next.config.ts๋ฅผ next.config.js๋ก ์ปดํ์ผํ๋ ๊ฒ์ ์์ ์ ์ฑ ์์ ๋๋ค. next.config.js๋ฅผ ๋ณํํ ๊ณํ์ด ์์ต๋๋ค.
@virzak ์, ๋ง์ ๋
ธ๋ ฅ ์์ด๋ ์๋๋๋ค. ts-node
๋ฐํ์ ๋ณํ์ด ํ์ํ๋ฉฐ Next.js์ ๋ถํ์ํ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ // @ts-check
๋ฅผ ์ฌ์ฉํ์ฌ Flowtype์์์ ๋ง์ฐฌ๊ฐ์ง๋ก next.config.js
$๋ฅผ ์
๋ ฅํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
nextJs Core๊ฐ typescript๋ก ์คํ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๊น?
์ด ๋ฌธ์ ๊ฐ ์ฌ๊ณ ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? 1๋ ์ ์ ๋ฌธ์ ๋ซ์๊ณ ๊ทธ ์ดํ๋ก ๋ง์ ๊ฒ์ด ๋ฐ๋์์ต๋๋ค. TS ์ง์์ ์ด์ ํต์ฌ์ ์ผ๋ถ์ ๋๋ค.
๋ด๊ฐ next.config.ts
์ ๊ฐ๊ณ ์ถ์ ๊ตฌ์ฒด์ ์ธ ์ด์ ๋ publicRuntimeConfig: { appInfo: generateAppInfo() }
๋ฅผ ์ค์ ํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์
๋๋ค. generateAppInfo()
ํจ์๋ helpers.ts
์ ์์ผ๋ฉฐ AppInfo
์ธํฐํ์ด์ค์ ๋ํด ์ ํ์ด ๊ฒ์ฌ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐํํฉ๋๋ค. ์ฝํ
์ธ ์๋ ํ์ฑํ๋ ๊ธฐ๋ฅ ์ค์์น, git commit hash, sentry id ๋ฐ ์คํ๋ ์ฑ ์ธ์คํด์ค์ ํ์ํ ๊ธฐํ ์ฌํญ์ด ํฌํจ๋ฉ๋๋ค.
๋์ผํ generateAppInfo()
ํจ์๊ฐ Jest ๋ชจ์์์ ์ฌ์ฉ๋๋ฏ๋ก ๊ตฌํ์ ts ํ์ผ์์ next.config.js
๋ก ๋ฐ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด์ generateAppInfo()
๋ฅผ ๋ณ๋์ js
ํ์ผ๋ก ์ถ์ถํด์ผ ํ๋ฏ๋ก AppInfo
์ธํฐํ์ด์ค์ ๋ํ ์ ํ ๊ฒ์ฌ๊ฐ ์์ค๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๐ค
์ฌ์ ํ https://github.com/zeit/next.js/issues/5318#issuecomment -425398180๊ณผ ๋์ผํฉ๋๋ค.
์ปดํ์ผํ๋ฉด ๋ถํ ์๋๊ฐ ๋๋ ค์ง๊ณ ์ด์ ์ ๋นํด ๊ตฌ์ฑ ๋ก๋๊ฐ ํจ์ฌ ๋ ๋ณต์กํด์ง๋๋ค.
์ฃผ์ ์ฑ๋ฅ ๋ฌธ์ ๋ ์์ฐ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. next.config.ts
๊ฐ ๋ค๋ฅธ ์ฝ๋์ ํจ๊ป .next
๋๋ ํ ๋ฆฌ๋ก ์ปดํ์ผ๋์ด ํ๋ก๋์
์์ babel
๋๋ ts-node
๋ฅผ ํตํด ์ ๋ฌํ ํ์๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋น๋ ์๊ฐ ์ต์ ํ์ ๋ฒ์๊ฐ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋ถํ
์๊ฐ์ ์ฝ๊ฐ ๋ ๋ซ์ง ์๋๋ผ๋ ๋์ผํ๊ฒ ์ ์ง๋์ด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์ด์ ์์ฐ์ ๋๋ค. ์ด ํ์ผ์ ๊ตฌ์ฑ ํ์ผ์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ณต์กํ ๋ด์ฉ์ด ์์ด์ผ ํฉ๋๋ค.
๋ถํ ์ฑ๋ฅ์ ์ ํ์ํค์ง ์๋๋ก ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌ์ฑ์ ๋น๋ํ๊ณ ์บ์ํด์ผ ํฉ๋๋ค. ๋ํ ์ด์ ์ ๋นํด ๋ถํ ์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น๋ค๋ฉด ์ถฉ๊ฒฉ์ ๋ฐ์ ๊ฒ์ ๋๋ค. ๋ด ์ ์ฒด ํ๋ก์ ํธ์์ ์ผ๊ด๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ ๋์ผํ ๋ฆฐํธ ๋๊ตฌ ๋๋ esnext ๊ตฌ๋ฌธ์ ํฌํจํ ์ ์๋ค๋ ๊ฒ์ด ๋ต๋ตํฉ๋๋ค.
์ด ํ์ผ์ ๊ตฌ์ฑ ํ์ผ์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ณต์กํ ๋ด์ฉ์ด ์์ด์ผ ํฉ๋๋ค.
์, ์์ฃผ ๊ฐ๋จํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํ ๊ฒ์ผ๊น์? ๋ชจ๋ฅด๊ฒ ์ด์. ์ ๋ ๋ง์ ์ฌ์ฉ์ ์ง์ ๋ฐ ์กฐ์ ์ด ํ์ํ ํฌ๊ณ ๋ณต์กํ ์ฑ์์ ์์
ํฉ๋๋ค. ์ด์ ๋ํ ๋ฐ์ดํฐ๋ ํฅ๋ฏธ๋ก์ธ ๊ฒ์
๋๋ค. ๊ทธ๋ค์ ํ์คํ preact.config.js
๋ฅผ ํธ๋์คํ์ผํ ๊ฐ์น๊ฐ ์๋ค๊ณ ๋๊ผ๊ณ ๋๋ ๊ทธ๊ฒ์ ๋ํด ๋์ ๋๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ด๊ฒ์ด ์ ๋ค๋ฅธ์ง ํ์คํ์ง ์์ต๋๋ค.
TS๋ฅผ ๋ณํํ์ง ์๊ณ ๋ง์ ์ด์ ์ ์๋ ์ด์ ๊ฐ์ด ๊ตฌ์ฑ์ ๋ช ๋ น์ ์ผ๋ก ์์ ํ๋ ๋ฐ ํนํ ์ ์ฉํ ๋๊ตฌ ์ค ํ๋๋ Ramda ์ ๋๋ค. ์ปค๋งํ ๋ ๋์ ์ ํ ์ถ๋ก ์ ๋ํ ๋ฉ์ง TS ์ง์์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋ชจ๋ ๊ฒ์ ๋ํ ๋์ FP ๋๊ตฌ ๋ฒจํธ์ ๋๋ค.
ํธ๋์คํ์ผ๋ next.config.ts
์ง์์ ์ฌ์ ํ โโ๊ณ ๋ ค๋์ง ์์ต๋๊น? ์ฐ๋ฆฌ์ ๊ตฌ์ฒด์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋จ์ํ ์์ ํ ์ ํ์ ์๋น์ค ๋๋ ํ ๋ฆฌ๊ฐ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด๋ผ๋ ๊ฒ์
๋๋ค. ์๋น์ค๋ API๋ฅผ ์ฌ์ฉํ๋ฉฐ ์์ ํ ์ ํ์
๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๋ API๋ฅผ ์ฌ์ฉํ๊ณ exportPathMap์ ์์ฑํ๋ ๋ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ํ๋๋ ์ ํ์ด ์ง์ ๋๊ณ ํ๋๋ ์ ํ์ด ์ง์ ๋์ง ์์ ์๋น์ค๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๋ค.
๋ด๋ณด๋ผ URL ๋ชฉ๋ก์ ์์ฑํ๋ ๊ฒ์ #9524์ getStaticPaths
๋ก ๋ค๋ฃน๋๋ค.
nextjs์ ํจ๊ป typescript๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ 2๊ฐ์ ํจํค์ง๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์์ ๊ฒ์
๋๋ค.
@babel/core
@babel/preset-typescript
๊ทธ๋ฐ ๋ค์ ์๋์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฆ์์์ typescript ํ์ผ์ ์๊ตฌํ ์ ์์ต๋๋ค.
function requireTypescript(path) {
const fileContent = require('fs').readFileSync(path, 'utf8')
const compiled = require('@babel/core').transform(
fileContent,
{
filename: path,
presets: [ '@babel/preset-typescript' ],
},
)
return eval(compiled.code)
}
๊ทธ๋ฐ ๋ค์ next.config.js
์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
const myModule = requireTypescript('./path/to/mymodule.ts')
_์ฐธ๊ณ : ts ํ์ผ์ด next.config.js
์ ๋์ผํ ํด๋์ ์๊ณ ํ์ํ ts ํ์ผ ๋ด๋ถ์ ์๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ผ๋ถ ๊ฒฝ๋ก ์ ๋ณด๋ฅผ ์ฝ์
ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋์ ts ํ์ผ์ ๋จ์ํ๊ฒ ์ ์งํ์ญ์์ค._
https://github.com/zeit/next.js/issues/5318#issuecomment -575959060์ ๋ํ ์ฐธ๊ณ ์ฌํญ
next start
๋ฅผ ์ฌ์ฉํ ๋ ๋ถํ
์๋๊ฐ ๋๋ ค์ง๋๋ค.๊ทธ๋ฌ๋ ํ๋ก์ ํธ์์ typescript๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ด๋ฏธ ํ์ ์์ ์ฑ์ ์ํด ์ฑ๋ฅ์ ์ด๋ ์ ๋ ํฌ์ํ์ง ์์์ต๋๊น? ํ์ผ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ด ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ถํ ํ ๋ ๊ฐ์๊ธฐ ๋๋ฌด ์ปค์ ๊ทน๋ณตํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ทธ๋ฆฌ๊ณ ์กฐ๊ธ ๋๋ํ๊ฒ ์บ์ํ๋ฉด ๋ถํ ํ ๋๋ง๋ค ๋ฐ์ํ์ง๋ ์์ต๋๋ค.
์ฌ๋๋ค์ด ํ์ดํ์คํฌ๋ฆฝํธ ๋์ ๋๋ฆฐ ๋ถํ
์ ๋ํด next.js
๋ฅผ ๋น๋ํ ๊ฒ์ด๋ผ๋ ์ฐ๋ ค๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
> compiled next.config.ts (1700ms)
๊ทธ๊ฒ์ ์ฌ๋๋ค์๊ฒ ์ด๋ค ๋๊ตฌ๊ฐ ๊ทธ๋ค์๊ฒ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ๋ถ๋ช ํ ํ ๊ฒ์ ๋๋ค.
@Janpot ์ ์ด ๋ฐฉ๋ฒ์ด ์๋๋ผ Next.js ๋ด๋ถ์ ์บ์๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฒ๋ค๊ฐ next start
๋ฅผ ์ฌ์ฉํ๋ฉด next.config.js๋ฅผ ๋ก๋ํ ๋ ํ๋ก๋์
๋ถํ
์ ์ํฅ์ ์ค๋๋ค. Next.js๋ ํ๋ก๋์
๋ถํ
์ typescript๋ฅผ ์ปดํ์ผํ์ง ์์ต๋๋ค.
์, ๋์ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์๋ ๋์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์์ ์ด ๊ธฐ๋ฅ์ ๊ฐ์์ผ๋ก ๊ตฌํํ๋ค๋ฉด ์บ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. next.js์๋ ์ด๋ฏธ typescript๋ฅผ ์ปดํ์ผํ๊ณ ์บ์ํ ์ ์๋ ์ธํ๋ผ๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก๋์
๋ถํ
์ ๊ฒฝ์ฐ next build
์คํํ ๋ ๋ฏธ๋ฆฌ ์ปดํ์ผํ ์ ์์ต๋๊น? ์ด ๋ชจ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํฉ๋๋ค.
๋๋ nextjs์์ ์ง์ํ๊ธฐ ๋๋ฌธ์ typescript๋ฅผ ์ฌ์ฉํ๊ณ next.config.js๊ฐ next.config.ts๊ฐ ๋๋ ๊ฒ์ด ๋ฉ์ง ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ ๊ฒ์ฌ๋ฅผ ์ ์ธํ๊ณ ๋ config๊ฐ typescript ํ์ผ์ด ๋ ํ์๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ ๊ทธ๋ค์ง ์ ๊ฒฝ์ฐ์ด์ง ์์์ต๋๋ค. ํ์ง๋ง ์ด์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ๋๋ ๋ด next.config.js์์ ts
๋์ฐ๋ฏธ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์์ต๋๋ค. .?). ๊ทธ๋์ ์ด์ ๋๋ next.config.js๊ฐ ์ค์ ๋ก next.config.ts์ฌ์ผ ํ๋ค๋ ์ ์ ๋ํด ๋ค์ ๊ฑฑ์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ts ๊ฐ์ ธ์ค๊ธฐ๋ ์ง์๋๋ฏ๋ก ์ฌ๊ธฐ์ ์์ต๋๋ค...
@lsm ์ด ์ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ ์์ ๋ณผ ์ ์์ง๋ง ์ด ํ๋์ ํ์ผ์ ๋ํด์๋ง babel ๋ฑ์ ์ฌ์ฉํ์ฌ ์๋์ ์ธ ์ฌ์ฉ์ ์ง์ ์ด ํ์ํฉ๋๋ค.
babel ๋๋ ๋ณ๋์ tsconfig์ tsc๋ฅผ ์คํํ๋ ์ผ๋ถ ์คํฌ๋ฆฝํธ์์ js๋ฅผ ๋ด๋ณด๋ด๋ฏ๋ก ์ด ๋์ฐ๋ฏธ ํ์ผ์ js๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด๋๊ฒ ๋ ์ข์ง...
๊ทธ๋ฌ๋ ์ ์๊ฐ "์ด ํ์ผ ํ๋๋ง"์ ๋ํ ์ง์๋ ์ถ๊ฐํ๊ณ ์ถ์ง ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ฝ๊ฐ์ ์์ด๋ฌ๋๋ฅผ ๋ณด๊ธฐ ์์ํ์ต๋๋ค.
๐ค๐ค๐ค๐ค๐ค๐คฆโโ๏ธ
์ถ์ : ์์ง ์ด ๋ชจ๋ ๊ฒ์ ์ด๋ป๊ฒ ํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ ์ด๋ ๋ด ๊ฐ์ ์ ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค.PPS getStaticPaths
๋ฅผ ๋ณด์์ง๋ง exportPathMap
์ ๊ฐ์ง ์์ต๋๋ค. ๊ฒฝ๋ก ๋งคํ์ด ํ์ํฉ๋๋ค.
UPD. @babel/core
๋ฐ @babel/preset-typescript
๋ ์ด๋ฏธ nextjs์ ์ผ๋ถ์ด๋ฏ๋ก @lsm ์ด ์ ์ํ ์ฝ๋๋ฅผ ์๋ํ์ง๋ง SyntaxError: Cannot use import statement outside a module
๊ฐ ํ์๋ฉ๋๋ค.
UPD2. ์ข์, ํฌ๊ธฐํ์ต๋๋ค. ์ด ts ๋์ฐ๋ฏธ ์คํฌ๋ฆฝํธ๋ฅผ js๋ก ๋ณ๊ฒฝํ๊ณ ํ์ํ ์์น์ ๊ฐ์ ธ์์ต๋๋ค(next.config.js ๋ฐ ํ์ด์ง์์ fs
lib๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ getStaticProps์์ ์ฌ์ฉํ์ต๋๋ค). )
@JerryGreen ์ ์ฉํ ๋์ฐ๋ฏธ๋ฅผ TS๋ก JS๋ก ๊ฒ์ํ๋ npm ํจํค์ง๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ์ต์ ์ด์์ต๋๊น?
@JerryGreen๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฝ๋๋ฅผ npm ํจํค์ง๋ก ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์์ง๋ง ํ๋ก์ ํธ์ ๋ฐ๋ผ ๋๋ฌด ๋ง์ ๊ฐ ํ๋ก์ ํธ์ ๋ํด ์ ํจํค์ง๋ฅผ ๊ฒ์ํด์ผ ํฉ๋๋ค. ์ง๊ธ์ ์ด๊ฒ์ ํฌ๊ธฐํ๊ณ js์์ ์ด ์ฝ๋์ ์ผ๋ถ๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ด ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ๋ ๋์ ์๋ฃจ์
์ Gatsby๊ฐ gatsby-node.ts
์์ ์ํํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ๋น๋ ์ฃผ๊ธฐ ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ์ต์
์ ๊ฐ๋ ๊ฒ์
๋๋ค.
@dpwolfe ์, @beppek ์ ๋์ํฉ๋๋ค. ์ด๊ฒ์ ๋๋ฌด ํ๋ก์ ํธ์ ๊ตญํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ 20200917-hello-world
์ ๊ฐ์ ๋ ์ง(์งง์ ํ์์คํฌํ)๋ก ์์ํ๋ ํ์ผ์ด ํ์ด์ง ํด๋์ ์๊ณ /hello-world
๊ฒฝ๋ก๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๊ทธ๋์ ํ์ผ ์์คํ
์ ํต๊ณผํ๊ณ ์ ๊ท ํํ์์ ์ ์ฉํ๊ณ exportPathMap
์ ํ์ํ ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค /blog/posts/20200917-hello-world
, -> /hello-world
. ๋๋ฌด ํ๋ก์ ํธ ํน์ ์ ์ธ ๊ฒ ๊ฐ์์ ํจํค์ง์ ๊ฒ์ํด์ผ ํ๋ ์ค์ ์ด์ ๊ฐ ์์ต๋๋ค. Btw ๋๋ getStaticProps
์ ๋ํด ์ฝ๊ฐ ๊ฑฐ์ง๋ง์ ํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํ์ํ์ง ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ฌ์ฉ์ ์ ์ exportPathMap
์ด๋ฉด ์ถฉ๋ถํฉ๋๋ค. ๊ทธ๋๋ ์ด ๋์ฐ๋ฏธ๊ฐ js๋ก ์์ฑ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด ์ด์ํฉ๋๋ค. ts๋ก ์์ฑํ๋ฉด next.config.js
์์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ง๋ ์ด ๋์ฐ๋ฏธ๋ฅผ js๋ก ์ฎ๊ฒจ์ผ ํ ๊ฒ์
๋๋ค. ํจํค์ง๋ฅผ ๋ถ๋ฆฌํ์ฌ ts๋ก ์์ฑํ๊ณ js๋ก ์ปดํ์ผํ๋ฉด next.config.js
๋ด์์ ์ฌ์ฉํ ์ ์์ง๋ง ๊ฐ์ธ์ ์ธ ํ์์ ๋ฐ๋ผ ๊ฑฐ์ ๋๊ตฌ์๊ฒ๋ ํ์ํ ๊ฒ์
๋๋ค.
์ด์ ๊ฐ์ด ์ต์ ํด์ผ ํ๋ eslint ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
/* eslint-disable @typescript-eslint/no-var-requires */
const withFonts = require('next-fonts');
์ด๊ฒ์ ๋ค์ ์ด๊ฑฐ๋ ์ ์ด๋ ์ด๊ฒ์ด ์๋ ค์ง ๋ฌธ์ ์์ ์ธ๊ธํ๊ธฐ ์ํด typescript ๋ฌธ์์ ์ถ๊ฐ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ๋ฏธ๋ฆฌ ๋ฌธ์ํํ๊ฑฐ๋ next.config.ts๋ฅผ ๋ ์ ํ์ฉํ๊ธฐ ์ํด ์ธ๋ จ๋ฏธ๋ฅผ ์ถ๊ฐํ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
nextJs Core๊ฐ typescript๋ก ์คํ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๊น?