nodeJS 시작하기
document 폴더에 wetube 폴더를 만들고, vsc에서 불러온다.
package.json 파일을 생성한다
json이란 프로그래머가 파일에 정보를 저장하기 위해 만든 방식 중 하나이다.
Node js의 경우에 반드시 파일명 package.json이어야 한다.
우리는 직접 package.json 파일을 만들지 않을 거기 때문에 해당 파일을 삭제해준다.
참고로 계속 vsc 터미널에서 npm 입력이 되지 않아서..
nodejs 설치된 걸 확인했더니 여기엔 문제가 없어 오류를 찾아보니
아래와 같이 문제를 발견하고 해결했다.
댓글에 관련한 조언이 없길래 커뮤니티에 살포시 공유해둠.ㅋㅋ
(+ 터미널 단축키는 ctrl '` , 터미널 내용 지우려면 clear 입력, 나가기는 exit 입력)
이제 터미널 사용할 준비 완료!
git init 입력해서 깃 레포지토리를 생성하고
깃허브에 직접 wetube-reloaded 레포지토리를 만들어준다
해당 레포지토리의 링크를 복사해서 터미널에 아래와 같이 작성해준다.
git remote add origin 복사한URL
그러면 이제 git 이 wetube 폴더에서 일어나는 변경사항을 알려줄 것임!
npm init을 입력해서 package.json 파일을 만들어준다.
터미널에 쭉 뜨는 내용(이름, 라이센스, 레포지토리 주소 등...)이 맞는지 확인하고 나면 package.json 파일이 완성된다.
파일 내에서 기본적으로 작성된 main이랑 script 는 필요 없어서 삭제해준다.
그리고 index.js 파일 생성해줌.
node js파일명 --> 이 방법으로도 js파일을 실행시킬 수 있다
이번 프로젝트에서는 package.json으로 실행 해 줄것이다
package.json 안에 main --> 내가 만들고 배포한 package를 다른 사람들이 설치하면 main을 사용한다(이번 프로젝트에서는 필요없음)
package.json 안에 scripts를 만들어 준다
scripts 는 실행하고 싶을 것을 말한다 즉, scripts안에 실행할 것을 적어준다
ex) scripts={
"win": "node index.js" // win이 들어간 자리에 이름은 자유롭게 지어줄 수 있다
}
그 후 npm run start 로 실행시킬 수 있다 (package.json이 존재하는 폴더 한정)
Express 설치하기
npm i (install 써도 됨) express 를 터미널에 입력해서 Express 패키지를 다운로드 받는다
node_modules, package-lock.json 파일이 생성된다
node_modules 에는 npm으로 설치한 모든 패키지가 저장된다
express 는 혼자 작동되지 않기에 다른 패키지가 필요하다
node_modules 안에 express 안에 존재하는 package.json안에 dependencies는 express가 작동되기위해 필요한 패키지들을 나타낸다
express를 설치하는데 의존하고 있는 패키지가 있기 때문에 npm i express를 하면 그것들도 함께 설치된다
npm i express 를 했을 때 npm 이 알아서 dependencies에 express를 추가해준다
다음으로 넘어가기 전에 node_modules 폴더와 package-lock.json 파일 삭제하기
package.json 내에 dependencies로 express 있는 것 확인
Dependencies 이해하기
터미널에 npm i 를 입력하면 방금 삭제한 node_modules 폴더와 package-lock.json 파일이 다시 생긴다.
이는 npm이 package.json을 보고 dependencies를 찾은 후 그 안의 모듈을 알아서 설치해준 것!
package.json은 우리 프로젝트를 동작시킬 때 필요한 모듈들이 어떤 건지에 대한 정보를 담고 있다.
package-lock.json 은 내 패키지들을 안전하게 관리해준다.
패키지가 수정되었는지 버전 숫자들을 직접 입력할 필요 없이 npm이 알아서 처리해준다.
+ node_modul 폴더가 github에 올라가지 않도록 숨겨보기
.gitignore 파일을 생성하고 그 안에 /node_modules 를 입력한다
그러면 node_modules 폴더를 업로드하지 않게 된다.
+주의사항: npm install을 할 때는 에러 방지를 위해 package.json 창을 꼭 닫고 실행할 것!
(npm이 자동으로 package.json을 수정하는 것을 막기 위함임)
[요약]
- dependencies는 프로젝트를 구동시키는데 필요한 모듈들이다.
- 다른 사람들에게 node_modules 폴더를 보낼 필요 없다. package.json 파일을 가지고 npm.i 를 하면 npm이 dependencies에 있는 모든 것을 설치해준다.
Express 사용하기
index.js에서 작성
const express = require("express");
const app = express();
The Tower of Babel
Babel은 자바스크립트 컴파일러이다.
babel은 우리가 작성한 최신 JS를 컴파일 해준다. 즉, nodeJS가 JS를 이해할 수 있도록 변환시켜준다.
자바스크립트에는 아직 nodeJS가 이해하지 못하는 최신 코드가 있는데,
이를 해결하는 방법으로는
1. nodeJS 가 이해하는 자바스크립트만 쓰거나,
2. babel 을 사용하는 것이다.
nodeJS 에서 사용 가능한 babel 설치하기
터미널에 아래 내용을 입력해서 babel 을 설치한다.
npm install --save-dev @babel/core
package.json 은 그냥 텍스트 파일이고, 모든 파일은 node_modules 폴더에 설치된다
package.json 내에 dependencies와 devDependencies 가 구분되어 있는 것은
어떤 패키지가 무슨 일을 하는지 알려주는 것이다.
devDependencies는 개발자에게(만) 필요한 dependencies이다.
정리하자면 예제에서
하나는 프로젝트를 실행하기 위해 필요한 dependencies 이고 (자동차를 움직이는 데 필요한 가솔린 같은 것)
하나는 개발자에게 필요한 devDependencies 이다 (운전을 더 잘하려면 음악이 있어야 하는 것과 비슷함)
"dependencies": {
"express": "^4.18.1"
},
"devDependencies": {
"@babel/core": "^7.18.10"
}
여기서 중요한 것은 쳐야 하는 명령어가 다르다는 것이다.
npm install --save-dev @babel/core 에서 --save-dev를 지우면
devDependencies 안의 내용이 dependencies로 이동해버린다. 치명적이지는 않지만 주의할 것.
이제 babel의 설정 파일 (babel.config.json) 을 만들어준다.
그리고 해당 파일 안에 아래 코드를 입력한다 (babel 설명서 그대로 진행)
{
"presets": ["@babel/preset-env"]
}
그리고 devDependencies에 추가하기 위해
npm i @babel/preset-env --save-dev 를 실행해준다.
참고로 preset은 babel을 위한 거대한 플러그인이다.
플러그인 중에서도 smart preset이기 때문에 preset-env이 가장 유명하다
이 preset을 사용하면 최신 자바스크립트 구문을 사용할 수 있게 해준다. 바로 내가 찾던 것!
babel 사용하기
여기서는 babel을 직접 입력해서 사용하지 않고, package.json에 babel로 컴파일하는 scripts를 만들어준다.
그리고 이걸 위해 nodemon을 사용한다.
그 전에 설명서에 나와 있는 @babel/node 를 설치한다.
npm i @babel/node --save-dev
이제 win이라는 scripts 대신에 dev를 써주고,
node index.js 대신에 babel-node를 써서 작성해준다 (@bable/node를 설치했기 때문에 해당 명령어 사용 가능)
"scripts": {
"dev": "babel-node index.js"
},
index.js 에 작성한 내용대로 npm run dev를 해주면 결과값이 나오는데,
수정할 때마다 다시 run 해줘야 한다는 점이 번거롭다.
ex) hej i am jia 라고 바꾸면 다시 run 해서 반환해야 확인 가능
그래서 nodemon을 사용해보는 것임!
// const express = require("express"); 최신 문법으로 바꾸면 ->
import express from "express";
console.log("hejj");
// npm run dev ---> hejj
nodemon은 우리가 만드는 파일이 수정되는 걸 감시해주는 패키지이다.
파일이 수정되면 nodemon이 알아서 재시작을 해준다. (그러면 npm run dev를 계속 실행할 필요가 없어짐)
그렇다면 nodemon을 설치해보자!
npm i nodemon --save-dev
그리고 scripts 중 babel-node 앞에 nodemon --exec 를 작성해준다.
{
"name": "wetube",
"version": "1.0.0",
"description": "The best way to watch videos.",
"repository": {
"type": "git",
"url": "git+https://github.com/jangjia01234/wetube-reloaded.git"
},
"scripts": {
"dev": "nodemon --exec babel-node src/server.js"
},
"author": "Jia.J<jangjia01234@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/jangjia01234/wetube-reloaded/issues"
},
"homepage": "https://github.com/jangjia01234/wetube-reloaded#readme",
"dependencies": {
"express": "^4.18.1"
},
"devDependencies": {
"@babel/core": "^7.18.10",
"@babel/node": "^7.18.10",
"@babel/preset-env": "^7.18.10",
"nodemon": "^2.0.19"
}
}
저장 후 npm run dev 실행!
그러면 위에 보이는 것과 달리 npm run dev 이후 콘솔이 종료되지 않는다
console.log("how are you?")로 수정하니 수정된 값을 바로 반영해서 보여준다. 편리하구만.ㅋㅋ
nodeJS가 아니라 babel-node 로 작성하고 있다는 점 기억하기! (최신 문법 반영)
'Study > Youtube Clone' 카테고리의 다른 글
[유튜브 클론] Array Database, Edit Video (0) | 2022.08.18 |
---|---|
[유튜브 클론] Routers (0) | 2022.08.14 |
[유튜브클론] External Middlewares: Morgan (0) | 2022.08.12 |
[유튜브클론] Middlewares, Servers, Controllers (0) | 2022.08.11 |
[유튜브 클론] 첫 Express 서버 만들기 (0) | 2022.08.10 |