"어떤 프로그래밍 언어가 동작할 수 있는 프로그램"
작성한 코드가 실행되는 곳이 바로 런타임이다.
프로그래밍 언어가 구동되는 환경(program)
대표적으로 웹 브라우저가 있다.
자바스크립트가 브라우저가 아닌 곳에서 실행될 수 있다.
따라서 자바스크립트를 이용해서 웹 페이지 뿐만 아니라 서버와 같은 다른 프로그램도 만들 수 있다.
HTML <script></script>
내에 자바스크립트를 작성하면?
예) run.js라는 파일을 html파일내에 <script src="./run.js"></script>
로 추가한다.
웹 브라우저에서 작성한 코드가 실행된다.
터미널 창에 node <file_name>
명령어를 입력하면?
예) node runNode.js
입력 하면 터미널창에 해당 파일의 결과값이 출력된다.
Node는 JavaScript RunTime
웹 브라우저도 JavaScript RunTime
JavaScript 언어가 실행되는 환경 - 브라우저 & Node
Node.js도 하나의 프로그램이니까 당연히 버전이 있다.
보통 하위버전에서 상위버전으로 업데이트 하는 것은 쉽다.
개발툴은 요구하는 노드의 버전이 있는 경우가 종종 있기 때문에 컴퓨터에 여러 버전의 노드를 설치해야할 필요가 생긴다.
이런 경우 Node를 지우고 다시 설치하면 될 것이다. 하지만 너무 귀찮음..
이런 문제를 NVM, 노드 버전 관리자가 해준다고 한다.
NVM을 통해 간단한 명령어로 Node를 설치하고, 다양한 버전을 손쉽게 옮겨다닐 수 있다.
Node.js 공식사이트에서는 npm을 이렇게 말한다.
Node.js의 패키지 생태계인 npm은 훌륭한 개발자들이
Node.js 기반의 JavaScript로 개발된
오픈 소스를 모듈로 올려놓은 세계에서 가장 큰 오픈 소스 라이브러리 생태계입니다.
웹 개발에 필요한 모듈들을 npm 명령어로 쉽게 다운받고 사용할 수 있다.
일종의 앱 스토어같은 개념이다.
하나의 프로그램은 다양한 모듈이 합쳐져서 만들어지는데, 모든 모듈을 만들어서 쓰는게 아니다. 이유는 시간이 많이 걸릴 것이고, 개개인이 만든 것을 100% 신뢰하기 힘들기 때문이다.
명령어도 npm
으로 시작한다.
npm start
처럼, 프로젝트를 실행시킬 때 npm 키워드를 사용한다.
npm install
명령어의 기준은 package.json
이고 결과는 node_modules
폴더이다.
혼자 만든 프로젝트는 어떤 모듈이 필요하고 어떻게 실행시킬지 나만 알 수 있다.
아무것도 모르는 사람이 내 프로젝트를 실행시켜야 할 때는 어떤 모듈이 필요한지, 어떤 명령어로 프로젝트를 실행시키는지 알 수가 없다.
package.json은 그것을 알려주는 역할을 한다.
프로젝트 코드를 전달할 때, 코드와 package.json만 전달해주면 받는 사람은 package.json를 보고 실행하는 방법과 모듈 등의 정보를 알게 된다.
package.json에는 전자제품의 제품 설명서같은 개념이다.
이 프로그램을 실행시키기 위해 필요한 모듈의 종류, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있다.
프로그램을 실행시키기 위해 설치한 실제 모듈들은 node_modules
폴더에 다 들어가 있다. package.json에는 어떤 모듈인지 명시만 되어있다.
dependencies
이 프로젝트를 실행하기 위해 반드시 필요한 모듈이 무엇인지 적혀 있다.
개발자가 적는게 아니라 보통 npm에서 다운로드한 모듈이 알아서 여기에 적힌다.
devDependencies
이 프로젝트를 개발하는 환경에서 개발자에게 필요한 모듈들이 무엇인지 적혀 있다.
예) 코드 모양을 잡아주는 lint나 테스팅 모듈처럼, 실제 프로젝트 동작에 직접적으로 영향을 주지 않는 모듈들을 명시한다.
scripts
npm으로 실행시킬 수 있는 명령어를 정의한다.
예) npm test
를 실행시키면 "test파일을 node에서 실행시켜!"가 된다.
정의되지 않은 명령어라고 오류 메시지가 나오면 package.json 파일 scripts에 해당 명령어가 정의되어 있는지 확인해본다.
"scripts": {
"test": "jest",
"test:example": "jest test-example/",
"test:passme": "jest pass-me/",
"test:watch": "jest --watch",
"lint": "eslint **/*.js --quiet",
"submit": "node .travis/submit.js"
},
repository를 clone하면 node_modules폴더가 없을 것이다.
npm install
명령어를 입력하면 package.json에서 필요하다고 하는 모듈이 다운된다. 그럼 실제 모듈이 들어있는 node_modules 폴더가 설치된다. 확인하면 node_modules 디렉토리가 생겨 있을 것이다.
보통 이 node_modules폴더는 git에 올리지 않는다.
만약 node_modules 폴더가 git의 추척을 받는 중이면 .gitignore
에 명시한다.