<๊ฐ์>
์น ๋ธ๋ผ์ฐ์ ์ ๋์ธ ์ ์๋ ์ธ์ด๋ HTML, CSS, JS ์ด ์ธ ๊ฐ ๋ฟ์ด๋ค. TS(typescript)๋ JS๋ฅผ ๋ ์ฝ๊ฒ ์ฐ๊ธฐ ์ํ์ฌ ๋์จ ์ธ์ด ์ด์ง๋ง ์ด ์ฝ๋๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค. ์ด ๋ณํ ๊ณผ์ ์ ์๋์ผ๋ก ํด์ฃผ๋ Module์ด ๋ฐ๋ก Parcel์ด๋ค.
Parcel์ ๋ ๋ค๋ฅธ ์ฅ์ ์ ๋น๋๊ฐ ๋น ๋ฅด๊ณ ์ฝ๋ค๋ ๊ฒ์ด๋ค.
๋ํ ์ฐ๋ฆฌ๋ JS์์์ ์ค์ ํ์ผ์ธ package.json์ ์ด์ฉํด, test ์ํฉ๊ณผ ๋ฐฐํฌ ์ํฉ ๊ฐ๊ฐ ๋น๋๋ฅผ ๋ค๋ฅด๊ฒ ํด์ฃผ๋ ํ๊ฒฝ์ ๋ง๋ค ๊ฒ์ด๋ค.
1. package.json ์์ ๋ด์ฉ ์์
"scripts": {
"dev": "parcel ./index.html",
"build": "parcel build ./index.html"
}
package.json ์ "script"์์๋ ๋ค์ํ ๋ช ๋ น์ด๋ค์ ์ค์ ํด๋ ์ ์๋ค.
"A" : "B"์ด๊ณ , A๊ฐ B๋ ๋ช ๋ น์ด์ ์ด๋ฆ์ด๋ค.
npm run A ๋ฅผ ํฐ๋ฏธ๋์ ์น๋ฉด B๊ฐ ์คํ๋๋ค.
๊ทธ๋ผ ์์ ์ค์ ๋ค์ ํด์ ํด๋ณด์.
์ผ๋จ ๋ ๋ค parcel์ด๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. parcel์ ์ฌ๋ฌ ํ์ผ์ ํ๋๋ก ๋ฌถ์ด ๋น๋ ํด์ฃผ๋ ๋ชจ๋์ด๋ค.
๋ํ ํด๋น ํ์ผ ๋ด๋ถ์์ TS ํ์ผ์ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ํด๋น TS ํ์ผ์ JS ํ์ผ๋ก ๋ณํํ์ฌ ์คํ์์ผ์ฃผ๋ ์ญํ ๋ ํ๋ค.
dev: "parcel . /index.html"์ index.html์ด๋ผ๋ ํ์ผ์ ์ฐพ์์ ๋น๋ํ๋ผ๋ ์๋ฆฌ์ด๋ค.
build๋ parcel ์์ build๋ ๋ง์ด ํ๋ ๋ ๋ถ์ด ์๋๋ฐ, ์ด build๋ ์์ฑ์ ํด๋น ํ์ผ์ ์ฐพ์์ ๋ฐฐํฌ์ฉ์ผ๋ก ๋น๋์์ผ์ค๋ค.
๋ฐฐํฌ์ฉ์ผ๋ก ๋น๋ ์์ผ์ค๋ค๋ ๋ง์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐ๋ฆฌ๊ฐ html์ด๋ CSS๋ฅผ ์ธ ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ๋์ด์ฐ๊ธฐ ์ค๋ฐ๊ฟ ๋ฑ์ ํ๋ค.
ํ์ง๋ง ๋น๋ ํด์ ๋ธ๋ผ์ฐ์ ๋ก ํด๋น ํ์ผ์ ๋ณด๋ผ ๋, ์ด๋ฐ ๋์ด์ฐ๊ธฐ๋ ์ค๋ฐ๊ฟ์ ๋ถ ํ์ํ๋ค.
build์ ๊ธฐ๋ฅ์ ์ด๋ฐ ๋์ด์ฐ๊ธฐ, ์ค๋ฐ๊ฟ ๋ค ๋นผ๊ณ , ์ต๋ํ ์ฉ๋์ ์ค์ฌ์ ๋น๋ ํ๋ ๊ฒ์ธ๋ฐ, ์ด๋ฅผ ๋ฐฐํฌ์ฉ์ผ๋ก ๋น๋ ์ํจ๋ค๊ณ ๋งํ๋ค.
2. main.ts ๋ด๋ถ
import _ from 'lodash'
console.log(_.upperCase('hello-world'))
interface User {
name: String
age: number
}
const user: User = {
name: 'Heropy',
age : 85
}
console.log(user)
ts๋ js๋ฅผ ๋ ์ฐ๊ธฐ ์ฝ๊ฒ ๋ฐ๊พผ ์ธ์ด์ด๋ค.
์์ import _ from 'lodash'๋ lodash๋ผ๋ ๋ชจ๋์ ๊ธฐ๋ฅ์ _๋ผ๋ ๋ณ์ ์์ ๋ฃ๊ณ ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
๊ทธ ๋ค์ ๋ฌธ์์ ์ ์ ์๊ฒ ์ง๋ง _ ๊ฐ lodash์ ์ทจ๊ธ์ ๋ฐ๋๋ค. _.uppercase๋ lodash์์ ๋งค์๋ uppercase๋ฅผ ์ฐ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
import๋ฅผ ํด์ ๋ค๋ฅธ ๋ชจ๋์ ์ด ์๊ฐ๋ถํฐ ํด๋น js ํน์ ts ํ์ผ ๋ํ ๋ชจ๋ ์ทจ๊ธ์ ๋ฐ๋๋ค.
3. index.html ๋ด๋ถ
<script type = "module" src="./main.ts"></script>
ํด๋น ๋ฌธ์ฅ์ด html ํค๋์ ์ถ๊ฐ ๋์๋ค.
<script> ํ๊ทธ๋ html ๋ฌธ์ ์คํํ๋ค๊ฐ ํด๋น ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ํด๋น ํ๊ทธ์ ์์ฑ์ธ src๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฒฝ๋ก์ ํ์ผ์ ๋ค์ด ๋ฐ์์ ์คํํ๋ผ๋ ๋ป์ด๋ค.
์์ type ์์ฑ์ผ๋ก "module"์ด๋ผ ์ ํ ์๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฐธ์กฐํ typescript๊ฐ ๋ชจ๋์ด๋ผ์ ๊ทธ๋ ๋ค.
ํด๋น html์ ts๋ฅผ ์ฐธ์กฐํ๊ณ ์๋๋ฐ, ts -> js๋ก ๋ณํ ์์ผ์ฃผ์ง ์์ผ๋ฉด ์ฌ์ฉํ์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ parcel์ ์ด์ฉํ์ฌ, ํฐ๋ฏธ๋์ npm run 'parcel์ด ๋ ๋ช ๋ น์ด'๋ก ์คํ ์์ผ์ค์ผ ํ๋ค.
4. ๊ทธ ์ธ์ ์ฉ์ด ์ ๋ฆฌ
Ctrl + C ๋ฅผ ๋๋ฅด๋ฉด ํ์ฌ ์งํ๋๊ณ ์๋ ์๋ฒ๊ฐ ์ข ๋ฃ๋๋ค.
ํ๋ฒ build๋ฅผ ํ๊ณ ๋๋ฉด dis๋ผ๋ ํด๋๊ฐ ์๋ก ์๊ธด ๊ฒ์ ์ ์ ์๋ค. dist๋ distribute์ ์ฝ์๋ก,
์ด๋ค ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌํ๊ธฐ ์ํด, ๋น๋๋ ๊ฒฐ๊ณผ๋ค์ด ๋ชจ๋ ์ ์ฅ๋ ํด๋์ด๋ค.
parcel์ ๋ฒ๋ค๋ฌ๋ผ๊ณ ํ๋ค.
bundler๋ ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ค์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ง์ฝ ํ์ผ์ ๋ฌถ์ ์ ์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ๋ฐ์ํ๋ค.
1๊ฐ์ ํ์ผ์ ์์ฒญํ์ฌ ์๋ตํ๋๋ฐ ๊น์ง ์๊ฐ์ด 1์ด ๊ฑธ๋ฆฐ๋ค๋ฉด, 10000๊ฐ์ ํ์ผ์ ์์ฒญํ์ฌ ์๋ตํ๋๋ฐ ๊น์ง๋ 10000์ด๊ฐ ๊ฑธ๋ฆด ๊ฒ์ด๋ค. ํ ํ์ผ ํ ํ์ผ ๋ค ๊บผ๋ด์ ์๋ตํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
bundler๋ ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ํ๋์ ํ์ผ ์์ ๋ค ๋ชฐ์ ์ ์ด ๋๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ด ์๋ ํ๋์ ํ์ผ๋ง ๊บผ๋ด์ ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ์์ ๊ฒฝ์ฐ์์ 1๊ฐ์ ํ์ผ์ ์์ฒญํ์ฌ ์๋ตํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋น์ทํ๊ฒ ์๊ฐ์ด ์์๋จ์ ์ ์ ์๋ค.
5. ์ค์ค๋ก ํด๋ณด๊ธฐ
(๊ฐ๋ฐ์ฉ / ๋ฐฐํฌ์ฉ) ๋น๋ ๋ฐ๊พธ๋ฉฐ ์คํ
๋ฐฐํฌ์ฉ์ผ๋ก ์คํํ์๋๋ ๋น๋๋ html ๊ฒฐ๊ณผ๊ฐ ์ด๋ ๊ฒ ๋ด๋ค.
๋ฐฐํฌ์ฉ์ html์ด๋ css , js๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด๊ธฐ ์ต์ ํ๋ ์ํ๋ก ๋น๋ํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋์ด์ฐ๊ธฐ์ ์ค๋ฐ๊ฟ์ด ๋ค ์ฌ๋ผ์ง ๊ฒ์ ์ ์ ์๋ค.
<script>๋ฅผ ํตํด ์ฐธ์กฐ๋ js ํ์ผ๋ ๊ฐ๋ฐ์๊ฐ ๋ณด๊ธฐ์ ์ด์ง๋ฝ์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ฐฐํฌ์ ์ต์ ํ๋ ์ํ๋ก ๋์จ ๊ฑธ ๋ณผ ์ ์๋ค.
๊ฐ๋ฐ์ฉ์ผ๋ก ๋น๋ ํด๋ณด๊ธฐ
๊ฐ๋ฐ์๊ฐ ๊ณ ์น๊ธฐ ํธํ๊ฒ ๊ฐ๋ ์ฑ ์ข๊ฒ ๋์จ๋ค.
๋น๋๋ js๋ ๋ง์ฐฌ๊ฐ์ง ์ด๋ค.