npm i -D typescript ts-loader
ts-loader를 통해 모든 .ts 및 .tsx 파일을 로드한다.
{
"compilerOptions": {
"target": "ESNext", //ts 파일을 js 어떤 버전의 코드로 변환해줄지
"module": "ESNext", //js 파일 간 import 문법 구현시 어떤 문법 쓸지
// "useDefineForClassFields": true, if target is ES2022 or higher, including ESNext,
// "lib": ["DOM", "DOM.Iterable", "ESNext"], //js로 컴파일할 때 포함될 라이브러리 목록
"outDir": "./dist/", //js파일 아웃풋 경로 설정
"allowJs": true, //js 파일들 ts에서 import해서 쓸 수 있는지
"noUnusedParameters": true, //쓰지않는 파라미터 있으면 에러내기
"moduleResolution": "node", //모듈 해석 방법
"baseUrl": ".", //paths 사용시 필수
"paths": {
// 긴 상대 경로 피하는 방법
"@api/*": ["src/api/*"],
"@utils/*": ["src/utils/*"],
"@/*": ["src/*"]
},
"strict": true //강하게 타입을 정의. 아래 주석 처리한 옵션을 모두 활성화한 것과 같은 옵션
// "noImplicitAny": true, //any라는 타입이 의도치않게 발생할 경우 에러를 띄워주는 설정
// "strictNullChecks": true,
// "strictFunctionTypes": true,
// "strictBindCallApply": true,
// "strictPropertyInitialization": true,
// "noImplicitThis": true,
// "alwaysStrict": true,
},
"include": ["src", "**/*.ts"], //ts 적용할 파일 이름이나 패턴을 배열로 지정
"exclude": ["node_modules", "dist"] //컴파일에서 제외할 파일 및 디렉토리의 패턴
}
내 프로젝트의 환경에 맞게 설정해줬다. lib 옵션을 설정하지 않으면 target에 맞게 default 값을 ts가 알아서 지정해준다고 하여 제외하였다.
entry: {
main: './src/main.ts',
},
파일명 ts로 변경
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node_modules/,
},
ts-loader를 통해 모든 .ts 파일을 로드할 수 있도록 설정
resolve: {
extensions: ['.ts', '.js'],
alias: {
'@api': path.resolve(__dirname, './src/api'),
'@utils': path.resolve(__dirname, './src/utils'),
'@': path.resolve(__dirname, './src/'),
},
},
"build": "tsc && webpack"
Typescript를 적용하는 과정에서 에러를 만나 삽질했지만 결국 해결! main.ts 에 import한 파일들을 모두 찾을 수 없다는 에러가 있었다. 아래 사진은 상세 에러를 띄운 화면!

@을 쓰는게 node_modules 안에서 특정 기능을 하는 다른 파일과 겹쳐 인식하지 못하는 건가 싶었고, 다른 문자로 바꿔서 시도해봤지만 실패.Field 'browser' doesn't contain a valid alias configuration에 대해 검색해봤으나 해결할 만한 방법을 찾지 못함. 그러다가 main.ts에서 import 하는 파일들을 ts paths 설정이 아닌 상대경로로 바꿔주니 에러가 해결됨webpack typescript의 키워드로 검색했고 typescript 에서 paths로 단축어로 경로를 지정한다면, webpack 에서도 설정을 해줘야함을 알게됨.//webpack.config.js
resolve: {
extensions: ['.ts', '.js'],
alias: {
'@api': path.resolve(__dirname, './src/api'),
'@utils': path.resolve(__dirname, './src/utils'),
'@': path.resolve(__dirname, './src/'),
},
},
원래 있던 extensions에 alias를 추가해주니 에러가 해결됐다.

2시간 삽질의 보람!!!!!!! 여러 프로그램을 사용할 때 하나의 기능을 사용하려면 여러 프로그램들을 모두 연결해줘야한다는 것을 깨달았다.