TypeScript์ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ๊ณ ์ ์ ๊ฐ๋ฅํ๋ฉฐ ๋ฏธ๋ ์งํฅ์ ์ธ ํจํค์ง ์ง์ ์ ์ ๋ง๋์ธ์.
TypeScript ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต: ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํ ํจํค์ง ์ง์ ์ ๋ง์คํฐํ๊ธฐ
๋์์์ด ์งํํ๋ JavaScript ๋ฐ TypeScript ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ๊ตฌ์ฑ๋๊ณ ์ ์ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฃผ์ ๊ตฌ์ฑ ์์ ์ค ํ๋๋ ํจํค์ง ์ง์ ์ ์ ๋๋ค. ์ด๋ฌํ ์ง์ ์ ์ ์๋น์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํฉ๋๋ค. TypeScript 4.7์ ๋์ ๋ ๊ธฐ๋ฅ์ธ TypeScript์ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ๋น๊ตํ ์ ์๋ ์ ์ฐ์ฑ๊ณผ ์ ์ด ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ด๋ฌํ ์ง์ ์ ์ ์ ์ํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ด๋ ๋ฌด์์ ๋๊น?
ํจํค์ง์ package.json ํ์ผ ๋ด "exports" ํ๋ ์๋์ ์ ์๋ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ์ฌ์ฉํ๋ฉด ๋ค์ํ ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก ๋ค๋ฅธ ์ง์
์ ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ๋ชจ๋ ์์คํ
(
require,import): CommonJS(CJS) ๋๋ ECMAScript ๋ชจ๋(ESM)์ ํ๊ฒํ ํฉ๋๋ค. - ํ๊ฒฝ(
node,browser): Node.js ๋๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ ์ํฉ๋๋ค. - ํ๊ฒ TypeScript ๋ฒ์ (TypeScript ๋ฒ์ ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ)
- ์ฌ์ฉ์ ์ง์ ์กฐ๊ฑด: ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฒด ์กฐ๊ฑด์ ์ ์ํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ค์ํฉ๋๋ค.
- ๋ค์ค ๋ชจ๋ ์์คํ ์ง์: ๋ ๊ด๋ฒ์ํ ์๋น์์๊ฒ CJS ๋ฐ ESM ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ ์ ๊ณตํฉ๋๋ค.
- ํ๊ฒฝ๋ณ ๋น๋: Node.js ๋ฐ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์ ๊ณตํ์ฌ ํ๋ซํผ๋ณ API๋ฅผ ํ์ฉํฉ๋๋ค.
- ํ์ ํธํ์ฑ: ESM์ ์์ ํ ์ง์ํ์ง ์์ ์ ์๋ ์ด์ ๋ฒ์ ์ Node.js ๋๋ ์ด์ ๋ฒ๋ค๋ฌ์์ ํธํ์ฑ์ ์ ์งํฉ๋๋ค.
- ํธ๋ฆฌ ์์ดํน: ๋ฒ๋ค๋ฌ๊ฐ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๊ฑฐํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฏธ๋ ๋ณด์ฅ: JavaScript ์ํ๊ณ๊ฐ ์งํํจ์ ๋ฐ๋ผ ์๋ก์ด ๋ชจ๋ ์์คํ ๋ฐ ํ๊ฒฝ์ ์ ์ํฉ๋๋ค.
๊ธฐ๋ณธ ์์: ESM ๋ฐ CJS ์ง์ ์ ์ ์
ESM ๋ฐ CJS์ ๋ํ ๋ณ๋์ ์ง์ ์ ์ ์ ์ํ๋ ๊ฐ๋จํ ์์๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
{
"name": "my-library",
"version": "1.0.0",
"exports": {
".": {
"require": "./dist/cjs/index.js",
"import": "./dist/esm/index.js"
}
},
"type": "module"
}
์ด ์์์์:
"exports"ํ๋๋ ์ง์ ์ ์ ์ ์ํฉ๋๋ค."."ํค๋ ํจํค์ง์ ์ฃผ์ ์ง์ ์ ์ ๋ํ๋ ๋๋ค(์:import myLibrary from 'my-library';)."require"ํค๋ CJS ๋ชจ๋์ ์ง์ ์ ์ ์ง์ ํฉ๋๋ค(์:require('my-library')๋ฅผ ์ฌ์ฉํ ๋)."import"ํค๋ ESM ๋ชจ๋์ ์ง์ ์ ์ ์ง์ ํฉ๋๋ค(์:import myLibrary from 'my-library';๋ฅผ ์ฌ์ฉํ ๋)."type": "module"์์ฑ์ Node.js์ ์ด ํจํค์ง์ .js ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ES ๋ชจ๋๋ก ์ฒ๋ฆฌํ๋๋ก ์ง์ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๋ชจ๋ ๋ฆฌ์กธ๋ฒ๋ ์ฌ์ฉ ์ค์ธ ๋ชจ๋ ์์คํ
์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ์ง์
์ ์ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, require()๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ CJS ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ณ , import๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ ESM ๋ฒ์ ์ ๊ฐ์ ธ์ต๋๋ค.
๊ณ ๊ธ ๊ธฐ์ : ๋ค์ํ ํ๊ฒฝ ํ๊ฒํ
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ Node.js ๋ฐ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ํน์ ํ๊ฒฝ์ ํ๊ฒํ ํ ์๋ ์์ต๋๋ค.
{
"name": "my-library",
"version": "1.0.0",
"exports": {
".": {
"browser": "./dist/browser/index.js",
"node": "./dist/node/index.js",
"default": "./dist/index.js"
}
},
"type": "module"
}
์ฌ๊ธฐ์์:
"browser"ํค๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ง์ ์ ์ ์ง์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ณ API๋ฅผ ์ฌ์ฉํ๊ณ Node.js๋ณ ์ฝ๋๋ฅผ ์ ์ธํ๋ ๋น๋๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ ์ธก ์ฑ๋ฅ์ ์ค์ํฉ๋๋ค."node"ํค๋ Node.js ํ๊ฒฝ์ ์ง์ ์ ์ ์ง์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ Node.js ๊ธฐ๋ณธ ์ ๊ณต ๋ชจ๋์ ํ์ฉํ๋ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค."default"ํค๋"browser"๋๋"node"๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ์ ํด๋ฐฑ ์ญํ ์ ํฉ๋๋ค. ์ด๋ ๋ช ์์ ์ผ๋ก ์๋ก๋ฅผ ์ ์ํ์ง ์๋ ํ๊ฒฝ์ ์ ์ฉํฉ๋๋ค.
Webpack, Rollup ๋ฐ Parcel๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ ์ด๋ฌํ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ํ๊ฒ ํ๊ฒฝ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ง์ ์ ์ ์ ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ต์ ํ๋ฉ๋๋ค.
์ฌ์ธต ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ํ์ ๊ฒฝ๋ก ๋ด๋ณด๋ด๊ธฐ
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ์ฃผ์ ์ง์ ์ ์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ํจํค์ง ๋ด ํ์ ๊ฒฝ๋ก์ ๋ํ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉ์๊ฐ ํน์ ๋ชจ๋์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
{
"name": "my-library",
"version": "1.0.0",
"exports": {
".": "./dist/index.js",
"./utils": {
"require": "./dist/cjs/utils.js",
"import": "./dist/esm/utils.js"
},
"./components/Button": {
"browser": "./dist/browser/components/Button.js",
"node": "./dist/node/components/Button.js",
"default": "./dist/components/Button.js"
}
},
"type": "module"
}
์ด ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ฉด:
import myLibrary from 'my-library';๋ ์ฃผ์ ์ง์ ์ ์ ๊ฐ์ ธ์ต๋๋ค.import { utils } from 'my-library/utils';๋utils๋ชจ๋์ ๊ฐ์ ธ์ค๋ฉฐ, ์ ์ ํ CJS ๋๋ ESM ๋ฒ์ ์ด ์ ํ๋ฉ๋๋ค.import { Button } from 'my-library/components/Button';๋Button๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ, ํ๊ฒฝ๋ณ ํด๊ฒฐ์ด ์ํ๋ฉ๋๋ค.
์ฐธ๊ณ : ํ์ ๊ฒฝ๋ก ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ์ฉ๋ ๋ชจ๋ ํ์ ๊ฒฝ๋ก๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ณต๊ฐ์ฉ์ด ์๋ ๋ด๋ถ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ง ๊ด๋ฆฌ์ฑ ๋ฐ ์์ ์ฑ์ ํฅ์์ํต๋๋ค. ํ์ ๊ฒฝ๋ก๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ํ์ง ์์ผ๋ฉด ๋น๊ณต๊ฐ๋ก ๊ฐ์ฃผ๋์ด ํจํค์ง ์๋น์๊ฐ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋ฐ TypeScript ๋ฒ์ ๊ด๋ฆฌ
์๋น์๊ฐ ์ฌ์ฉํ๋ TypeScript ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์กฐ์ ํ ์๋ ์์ต๋๋ค.
{
"name": "my-library",
"version": "1.0.0",
"exports": {
".": {
"ts4.0": "./dist/ts4.0/index.js",
"ts4.7": "./dist/ts4.7/index.js",
"default": "./dist/index.js"
}
},
"type": "module"
}
์ฌ๊ธฐ์์ "ts4.0" ๋ฐ "ts4.7"์ TypeScript์ --ts-buildinfo ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์ ์ง์ ์กฐ๊ฑด์
๋๋ค. ์ด๋ฅผ ํตํด ์๋น์์ TypeScript ๋ฒ์ ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๋น๋๋ฅผ ์ ๊ณตํ ์ ์์ผ๋ฉฐ, "ts4.7" ๋ฒ์ ์์ ๋ ์๋ก์ด ๊ตฌ๋ฌธ๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด์ "ts4.0" ๋น๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ํ๋ก์ ํธ์ ํธํ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต ์ฌ์ฉ ๋ชจ๋ฒ ์ฌ๋ก
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋จ์ํ๊ฒ ์์: ๊ธฐ๋ณธ์ ์ธ ESM ๋ฐ CJS ์ง์๋ถํฐ ์์ํฉ๋๋ค. ์ฒ์์ ๊ตฌ์ฑ์ ์ง๋์น๊ฒ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ๋ง์ญ์์ค.
- ๋ช
ํ์ฑ ์ฐ์ : ์กฐ๊ฑด์ ๋ํ ์ค๋ช
์ ์ธ ํค๋ฅผ ์ฌ์ฉํฉ๋๋ค(์:
"browser","node","module"). - ํ์ฉ๋ ๋ชจ๋ ํ์ ๊ฒฝ๋ก ๋ช ์์ ์ผ๋ก ์ ์: ์๋ํ์ง ์์ ๋ด๋ถ ๋ชจ๋ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์ผ๊ด๋ ๋น๋ ํ๋ก์ธ์ค ์ฌ์ฉ: ๋น๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ ์กฐ๊ฑด์ ๋ํด ์ฌ๋ฐ๋ฅธ ์ถ๋ ฅ ํ์ผ์ ์์ฑํ๋์ง ํ์ธํฉ๋๋ค. `tsc`, `rollup` ๋ฐ `webpack`๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํ์ฌ ํ๊ฒ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๋ฒ๋ค์ ์์ฑํ ์ ์์ต๋๋ค.
- ์ฒ ์ ํ๊ฒ ํ ์คํธ: ๋ค์ํ ํ๊ฒฝ ๋ฐ ๋ค์ํ ๋ชจ๋ ์์คํ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ ์คํธํ์ฌ ์ฌ๋ฐ๋ฅธ ์ง์ ์ ์ด ํด๊ฒฐ๋๋์ง ํ์ธํฉ๋๋ค. ์ค์ ์ฌ์ฉ ์๋๋ฆฌ์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ํตํฉ ํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ง์ ์ ๋ฌธ์ํ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ README ํ์ผ์ ์๋ก ๋ค๋ฅธ ์ง์ ์ ๊ณผ ํด๋น ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ช ํํ๊ฒ ๋ฌธ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋น์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋น๋ ๋๊ตฌ ์ฌ์ฉ ๊ณ ๋ ค: Rollup, Webpack ๋๋ esbuild์ ๊ฐ์ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก ๋ค๋ฅธ ํ๊ฒฝ ๋ฐ ๋ชจ๋ ์์คํ ์ ๋ํ ์๋ก ๋ค๋ฅธ ๋น๋๋ฅผ ๋ง๋๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ชจ๋ ํด๊ฒฐ ๋ฐ ์ฝ๋ ๋ณํ์ ๋ณต์ก์ฑ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
package.json"type" ํ๋์ ์ฃผ์ํ์ญ์์ค: ํจํค์ง๊ฐ ์ฃผ๋ก ESM์ธ ๊ฒฝ์ฐ"type"ํ๋๋ฅผ"module"๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Node.js๊ฐ .js ํ์ผ์ ES ๋ชจ๋๋ก ์ฒ๋ฆฌํ๋๋ก ์๋ฆฝ๋๋ค. CJS์ ESM์ ๋ชจ๋ ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ์๋์ง ์์ ์ํ๋ก ๋๊ฑฐ๋"commonjs"๋ก ์ค์ ํ๊ณ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ง๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
์ค์ ์์
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ํ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- React: React๋ ๊ฐ๋ฐ ๋ฐ ํ๋ก๋์ ํ๊ฒฝ์ ๋ํ ์๋ก ๋ค๋ฅธ ๋น๋๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋ฐ ๋น๋์๋ ์ถ๊ฐ ๋๋ฒ๊น ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๊ณ , ํ๋ก๋์ ๋น๋๋ ์ฑ๋ฅ์ ์ต์ ํ๋์ด ์์ต๋๋ค. React์ package.json
- Styled Components: Styled Components๋ ๋ธ๋ผ์ฐ์ ๋ฐ Node.js ํ๊ฒฝ๊ณผ ๋ค์ํ ๋ชจ๋ ์์คํ ์ ๋ชจ๋ ์ง์ํ๊ธฐ ์ํด ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ํ ํ๊ฒฝ์์ ์ํํ๊ฒ ์๋ํฉ๋๋ค. Styled Component์ package.json
- lodash-es: Lodash-es๋ ํธ๋ฆฌ ์์ดํน์ ํ์ฑํํ์ฌ ๋ฒ๋ค๋ฌ๊ฐ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๊ณ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋๋ก ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ํ์ฉํฉ๋๋ค. `lodash-es` ํจํค์ง๋ ๊ธฐ์กด CJS ๋ฒ์ ๋ณด๋ค ํธ๋ฆฌ ์์ดํน์ ๋ ์ ํฉํ Lodash์ ES ๋ชจ๋ ๋ฒ์ ์ ์ ๊ณตํฉ๋๋ค.
Lodash์ package.json (
lodash-esํจํค์ง ์ฐพ๊ธฐ)
์ด๋ฌํ ์์๋ ์ ์ ๊ฐ๋ฅํ๊ณ ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์์ด ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ๊ฐ๋ ฅํจ๊ณผ ์ ์ฐ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋์ ์ฐพ์ ์ ์์ ์ค๋ฅ: ์ผ๋ฐ์ ์ผ๋ก
"exports"ํ๋์ ์ง์ ๋ ๊ฒฝ๋ก์ ๋ฌธ์ ๊ฐ ์์์ ๋ํ๋ ๋๋ค. ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅธ์ง, ํด๋น ํ์ผ์ด ์๋์ง ๋ค์ ํ์ธํ์ญ์์ค. * ์๋ฃจ์ : ์ค์ ํ์ผ ์์คํ ์ ๋ํดpackage.jsonํ์ผ์ ๊ฒฝ๋ก๋ฅผ ํ์ธํฉ๋๋ค. exports ๋งต์ ์ง์ ๋ ํ์ผ์ด ์ฌ๋ฐ๋ฅธ ์์น์ ์๋์ง ํ์ธํฉ๋๋ค. - ์๋ชป๋ ๋ชจ๋ ํด๊ฒฐ: ์๋ชป๋ ์ง์ ์ ์ด ํด๊ฒฐ๋๋ ๊ฒฝ์ฐ, ๋ฒ๋ค๋ฌ ๊ตฌ์ฑ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋ ํ๊ฒฝ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. * ์๋ฃจ์ : ๋ฒ๋ค๋ฌ ๊ตฌ์ฑ์ ๊ฒ์ฌํ์ฌ ์ํ๋ ํ๊ฒฝ(์: ๋ธ๋ผ์ฐ์ , ๋ ธ๋)์ ์ฌ๋ฐ๋ฅด๊ฒ ํ๊ฒํ ํ๋์ง ํ์ธํฉ๋๋ค. ๋ชจ๋ ํด๊ฒฐ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ํ๊ฒฝ ๋ณ์ ๋ฐ ๋น๋ ํ๋๊ทธ๋ฅผ ๊ฒํ ํฉ๋๋ค.
- CJS/ESM ์ํธ ์ด์ฉ์ฑ ๋ฌธ์ : CJS์ ESM ์ฝ๋๋ฅผ ํผํฉํ๋ฉด ๋๋๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฐ ๋ชจ๋ ์์คํ
์ ๋ํด ์ฌ๋ฐ๋ฅธ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ญ์์ค.
* ์๋ฃจ์
: ๊ฐ๋ฅํ ๊ฒฝ์ฐ CJS ๋๋ ESM ์ค ํ๋๋ฅผ ํ์คํํฉ๋๋ค. ๋ ๋ค ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋์
import()๋ฌธ์ ์ฌ์ฉํ์ฌ CJS ์ฝ๋์์ ESM ๋ชจ๋์ ๋ก๋ํ๊ฑฐ๋import()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ESM ๋ชจ๋์ ๋์ ์ผ๋ก ๋ก๋ํฉ๋๋ค.esm๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ CJS ํ๊ฒฝ์์ ESM ์ง์์ ์ฑ์ธ ์ ์์ต๋๋ค. - TypeScript ์ปดํ์ผ ์ค๋ฅ: TypeScript ๊ตฌ์ฑ์ด CJS ๋ฐ ESM ์ถ๋ ฅ์ ๋ชจ๋ ์์ฑํ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
ํจํค์ง ์ง์ ์ ์ ๋ฏธ๋
์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ๋น๊ต์ ์๋ก์ด ๊ธฐ๋ฅ์ด์ง๋ง ํจํค์ง ์ง์ ์ ์ ์ ์ํ๋ ํ์ค์ผ๋ก ๋น ๋ฅด๊ฒ ์๋ฆฌ ์ก๊ณ ์์ต๋๋ค. JavaScript ์ํ๊ณ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ์ ์ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. ํฅํ TypeScript ๋ฐ Node.js ๋ฒ์ ์์ ์ด ๊ธฐ๋ฅ์ ๋ํ ์ถ๊ฐ ๊ฐ์ ๋ฐ ํ์ฅ์ ๊ธฐ๋ํ์ญ์์ค.
ํฅํ ๊ฐ๋ฐ์ ์ ์ฌ์ ์์ญ ์ค ํ๋๋ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ๋ํ ๊ฐ์ ๋ ๋๊ตฌ ๋ฐ ์ง๋จ์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ ๋์ ์ค๋ฅ ๋ฉ์์ง, ๋ ๊ฐ๋ ฅํ ์ ํ ๊ฒ์ฌ ๋ฐ ์๋ํ๋ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
TypeScript์ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ํจํค์ง ์ง์ ์ ์ ์ ์ํ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ฌ๋ฌ ๋ชจ๋ ์์คํ , ํ๊ฒฝ ๋ฐ TypeScript ๋ฒ์ ์ ์ํํ๊ฒ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ง์คํฐํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์์ฑ, ์ ์ง ๊ด๋ฆฌ์ฑ ๋ฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผ ๋์์์ด ๋ณํํ๋ JavaScript ๊ฐ๋ฐ ์ธ๊ณ์์ ๊ด๋ จ์ฑ์ ์ ์งํ๊ณ ์ ์ฉ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค. ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ํ์ฉํ์ฌ TypeScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ๋ฐํํ์ญ์์ค!
์ด ์์ธํ ์ค๋ช ์ TypeScript ํ๋ก์ ํธ์์ ์กฐ๊ฑด๋ถ ๋ด๋ณด๋ด๊ธฐ ๋งต์ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๋ฐ ํผํผํ ๊ธฐ๋ฐ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํญ์ ๋ค์ํ ํ๊ฒฝ ๋ฐ ๋ค์ํ ๋ชจ๋ ์์คํ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ฌ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ญ์์ค.