๋ฒ๋ค๋ฌ
์น์ฑ์ ๊ตฌ์ฑํ๋ asset(์คํฌ๋ฆฝํธ, ์คํ์ผ์ํธ, ์ด๋ฏธ์ง ๋ฑ)์ ๋ชจ๋ ๋ฌถ์ด ์ต์ ํ๋ ์ฌ๋ฌ ํ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ๋ก,
์ฑ๋ฅ์ ์ต์ ํํด์ฃผ๋ฉฐ, ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ๊ณ , ๊ฐ๋ฐ ๊ณผ์ ์์ ํ์ํ ์์ ์ ๊ฐ์ํํ๊ธฐ ๋๋ฌธ์ ํธ์์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
Webpack
ํ์ ์คํฌ๋ฆฝํธ ๊ฐ์ด๋ : https://webpack.kr/guides/typescript/
- JS ์ฑ์ ์ํ ์ ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ
- ์ฌ๋ฌ ํ์ผ(js, css, html, ์ด๋ฏธ์ง) ๋ฑ์ ๋ฒ๋คํด ํ๋ ํน์ ์ฌ๋ฌ ํ์ผ๋ก ๋ฌถ์ด์ฃผ๋ ๋๊ตฌ
- ๋ชจ๋ ๋ฒ๋ค๋ง / ๋ก๋ / ํ๋ฌ๊ทธ์ธ์ ์ง์ํจ
์ค์ต
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "es6",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "./dist",
"noUncheckedIndexedAccess": true
},
"include": ["src"]
}
ํฐ๋ฏธ๋์์ package.json ์ด๊ธฐํ์ผ ์์ฑ ํ ts ๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก ์ค์น
npm init -y
npm i --save-dev typescript
index.html์ emmet ์ฝ์ด๋ก html ๊ธฐ๋ณธ ํ์ ์์ฑํ๋ค.
dice.ts
export default class Dice {
constructor(private sides: number) {}
roll(): number {
let number = Math.floor(Math.random() * this.sides) + 1;
return number;
}
}
index.ts
import Dice from './util/dice';
const labels = {
button: '์ฃผ์ฌ์ ๋์ง๊ธฐ',
div: '๊ฒฐ๊ณผ : ',
};
function main() {
const button = document.createElement('button');
const resultDiv = document.createElement('div');
button.innerText = labels.button;
document.body.append(button, resultDiv);
const dice = new Dice(6);
button.addEventListener('click', () => {
resultDiv.innerText = `${labels.div}${dice.roll()}`;
});
}
main();
์ด์ ์ง๊ธ๊น์ง์ ์ฝ๋๋ฅผ webpack์ผ๋ก ๋ฒ๋ค๋ง์ ํด๋ณด๊ณ ์ ํ๋ค.
ํฐ๋ฏธ๋์์ ๋ค์ ํจํค์ง๋ค์ ์ค์นํ๋ค.
- webpack-cli : ํฐ๋ฏธ๋์์ webpack์ ๋ช ๋ น์ด๋ก ์คํํ ์ ์๊ฒ ํด์ค
- webpack-dev-server : ๊ฐ๋ฐ ์ค ์ฌ์ฉํ ์ ์๋ ๋ก์ปฌ ๊ฐ๋ฐ ์๋ฒ (์ฝ๋ ๋ณ๊ฒฝ ์ ์๋์ผ๋ก ๋ฆฌํ๋ ์๋จ)
- html-webpack-plugin : ๋ฒ๋ค๋ง๋ Jsํ์ผ์ ์๋์ผ๋ก html์ ์ฝ์ ํด์ค
- ts-loader : tsํ์ผ์ Webpack์์ js๋ก ๋ณํํด์ฃผ๋ ๋ก๋๋ก tsconfig.json์ ์ฐธ๊ณ ํด ์ปดํ์ผํจ
npm i --save-dev webpack webpack-cli webpack-dev-server html-webpack-plugin ts-loader
๊ทธ๋ฆฌ๊ณ https://webpack.kr/guides/typescript/ ์์ webpack.config.js ์ค์ ์ ์๋ดํด์ฃผ๋๋ฐ, ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค.
webpack.config.js (ํ๋ก์ ํธ ํด๋ ์ต์๋จ์ ์์น)
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: 'development',
entry: './src/index.ts',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js'],
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
plugins: [
new HtmlWebpackPlugin({
template: 'src/index.html',
}),
],
};
๋ง์ง๋ง์ผ๋ก webpack-dev-server๋ก ์คํํ๊ธฐ ์ํด package.json์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ฉด
"scripts": {
"start": "webpack-dev-server --open --mode development",
"build": "webpack --mode production"
},
์ ์คํ๋จ์ ํ์ธํ ์ ์๋ค.
๋ฐฐํฌ์ฉ ๋น๋ํ๊ธฐ๋ ์์์ ์ถ๊ฐํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
npm run build
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ dist ํ์ผ ๋ด์ ์์ถ๋ bundle.js์ index.html์ด ์์ฑ๋๋ค.
'typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TypeScript / ํ์ ์ ์ธ ํ์ผ (4) | 2025.06.10 |
---|---|
TypeScript / ์ ๋ค๋ฆญ (2) | 2025.06.05 |
TypeScript / ํด๋์ค (0) | 2025.06.05 |
TypeScript / ํ์ ์ถ๋ก , ํ์ ๋จ์ธ (0) | 2025.06.05 |
TypeScript / ํ์ (2) (0) | 2025.06.04 |