CRA로 항상 해왔지만, 사용하지 않는 패키지들도 저절로 다운로드가 되고, 따라서 빌드속도가 느려지게 되고 bable이나 webpack 설정을 변경하는 것이 까다롭고 복잡하다고 해서 CRA없이 초기 셋팅을 진행하고자 했다.
참조 링크
https://rinn-story.tistory.com/27
npm init
npm i react react-dom
index.html
, index.tsx
, App.tsx
index.html
은 public 파일 내에 위치해야함npm i -D typescript @types/react @types/react-dom
tsc --init
tsconfig.json
파일 추가 → 자신이 원하는대로 스타일 설정 가능💡 tsc - -init 에서 에러 발생
tsc : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Users\ADMIN\AppData\Roaming\npm\tsc.ps1 파일을 로드할 수 없습니다.
자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
위치 줄:1 문자:1
- tsc -v
+ CategoryInfo : 보안 오류: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
1) node 삭제 후 재설치 진행 → 해결 안됨
2) ExecutionPolicy 스크립트 코드 제한 해제
→ 스크립트 보안 오류로 접근
Set-ExecutionPolicy RemoteSigned
으로 변경참조 링크 https://itpro.tistory.com/100
.map
파일로 생성되며 배포 단계의 버그를 더 쉽게 잡아낼 수 있음{
"compilerOptions": {
"target": "ES5",
"lib": ["dom", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020"],
"jsx": "react-jsx",
"module": "es2015",
"moduleResolution": "node",
"baseUrl": "./",
"allowJs": true,
"sourceMap": true,
"outDir": "./dist",
"isolatedModules": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"strict": true
}
}
npm i -D babel-loader @babel/core @babel/preset-env
npm i -D @babel/preset-react @babel/preset-typescript
패키지 역할 설명
babel-loader
, @babel/core
, @babel/preset-env
보통 ES6+문법으로 코드를 작성하면 IE 웹 브라우저와 같이 구형 브라우저에서는 제대로 지원이 되지 않는다. 따라서 babel JavaScript 컴파일러를 활용하여 IE에서도 ES6+ 문법을 사용할 수 있게 함
@babel/preset-typescript
원래 바벨과 타입스크립트는 따로 작업이 되었지만, 해당 플러그인을 통해 타입스크립트와 바벨이 조화롭게 병합하여 사용하게 된다. TypeScript를 사용한다면 필요한 플러그인들의 집합
@babel/preset-react
jsx로 작성된 코드들을 createElement 함수를 이용한 코드로 변환해 주는 바벨 플러그인이 내장되어 있음. React를 사용한다면 필요한 플러그인들의 집합
바벨 설정 파일
babel.config.js
npm i webpack webpack-cli webpack-dev-server webpack-merge --dev
npm i html-webpack-plugin ts-loader clean-webpack-plugin --dev
패키지 역할 설명
webpack
, webpack-cli
webpack : 웹팩 그 자체의 패키지
webpack-cli : 터미널에서 webpack 커맨드를 실행할 수 있게 해주는 커맨드라인 도구
webpack-dev-server
빠른 실시간 리로드를 가능하게 하는 개발 서버디스크에 저장되지 않는 메모리 컴파일을 사용하기 때문에 컴파일 속도가 빠름. webpack.config.js에서 devServer 옵션을 통해 옵션을 지정하여 사용이 가능함
webpack-merge
webpack을 dev, prod 모드로편안하게 분리하여 구축할 수 있게 도와줌
html-webpack-plugin
html 파일을 템플릿으로 생성할 수 있게 도와주는 플러그인
ts-loader
타입스크립트 코드를 자바스크립트 코드로 변환
webpack.config.js
파일 추가
webpack.dev.js
, webpack.prod.js
파일 추가
npm start
로 프로젝트를 시작함...
"scripts": {
"dev": "webpack-dev-server --config webpack.dev.js --open --hot",
"build": "webpack --config webpack.prod.js",
"start": "webpack-dev-server --config webpack.dev.js"
},
...
💡 npm start → 프로젝트 실행되지 않는 오류 → 다시 처음부터 설정해서 오류 해결
[webpack-cli] Failed to load 'S:\Project\web2\webpack.dev.js' config
[webpack-cli] Error: Cannot find module 'clean-webpack-plugin' …
→ 에러가 달라지긴 했으나 여전히 에러 발생
[webpack-cli] TypeError: Cannot read properties of undefined (reading 'getArguments')
at WebpackCLI.getBuiltInOptions (S:\Project\web2\node_modules\webpack-cli\lib\webpack-cli.js:831:77) …
찾아보니 웹펙 4점대 특정버전은 문제가 있다는 것 같아서 webpack@4.19.0 webpack-cli@3.0.4 version으로 다시 설치함
→ Error: Cannot find module './webpack.common.js… 해당 에러 발생 → webpack.config.js 파일 명을 webpack.common.js 로 변경 → Error: Cannot find module 'clean-webpack-plugin’ 해당 에러 발생 → npm install --save-dev clean-webpack-plugin 설치 →