NPM
•
npm은 Node Package Manager이다.
•
Third Party Package를 추가할 때도 사용한다.
•
npm init이라는 Command로 프로젝트를 initialize하면서 package.json을 생성하고, Script를 설정한다.
•
Script 설정은 Command에 대한 Shortcut을 제공한다.
•
start라고 하는 Script가 수행할 Command를 지정하고 (ex) "start" : "node app.js"), npm start를 하면 해당 명령어를 수행하게 된다.
•
그렇다면 다른 Script 이름을 무작위로 정할 수 있는가? → start라고 하는 Script가 굉장히 특별했던 것이지, 아무 것이나 설정한다고 구동되지는 않는다. (ex) npm start-server는 동작하지 않는다.)
•
그렇다면 Custom으로 설정한 이름의 Script는 실행할 방법이 없는가? → npm run을 통해서 수행 가능하다. (ex) npm run start-server)
•
npm install을 살펴보기 위해 Third Party Package로 Nodemon을 예로 들어보자.
•
Third Party Dependencies는 npm Repository(Cloud Package Repository)에서 사용이 가능하다. 해당 Package들은 npm을 통해서 설치, 관리하게 된다.
•
이제까지는 npm start처럼 서버를 구동한 상태에서 코드를 수정하면, 서버를 Kill 했다가 다시 Start해줘야 했다. 하지만 'nodemon'이라는 Third Party Package를 통해 이를 해결할 수 있다. (Third Party Package들은 npmjs.com에서 확인할 수 있다.)
•
npm install을 통해서 Third Party Package를 설치할 때, 크게 두 부류로 나눌 수 있다.
1.
Development용 Third Party Package
npm install $name —save-dev
2.
Production용 Third Party Pacakge
npm install $name —save
•
이렇게 설치된 Package들은 node_modules라는 디렉토리에 생성된다. node_modules를 지웠을 때, 다시 npm install을 통해서 생성할 수 있다. 일단 Third Party Package를 사용하기 위해서는 node_modules가 필요하다.
** nodemon의 경우 Production의 Level에선 Dynamic하게 코드를 바꿀 일이 없기 때문에 Development이다.
** 물론 별도로 나누지 않아도 되지만 어떤 Package가 어떻게 사용 되고 있는지에 대해서 명확히 이해할 수 있다.
** —save / —save-dev와 달리 -g라는 옵션은 해당 프로젝트에 설치하는 것이 아닌, 내 Machine에 설치하여 Global하게 어떤 프로젝트에서도 이용할 수 있도록 하는 옵션이다.
** npm install을 단독으로 쓸 경우, package.json에 있는 모든 package들을 자동으로 설치하게 된다.
** package.json이 아닌 package.lock에는 Third Party Package에 대한 상세한 정보들이 기록되어 있다.
Global Features vs Core Modules vs Third Party Modules
1.
Global Features
•
Always available, you don't need to import them into the files where you want to use them
2.
Core Modules
•
Don't need to be installed (NO npm install is required) but you need to import them when you want to use features exposed by them
3.
Third Party Modules
•
Need to be installed (via npm install in the project folder) AND imported
Nodemon 사용하기
•
Third Party Package 설치로 Nodemon을 설치를 했더라도 터미널에서 직접적인 명령어 타이핑으로는 사용이 불가능하다. 이유는...프로젝트에서만 설치되었고, 아직 내 Machine에는 Global하게 설치되지 않았기 때문이다. 따라서 Global하게 터미널에서 Nodemon이라는 Command를 이용하고 싶으면 -g 옵션으로 설치하여 이용하면 되고, 그렇지 않다면 npm에 Script에 등록하여 Indirect하게 사용하면 된다.
•
npm의 Script중에 start에 대한 Script를 다음과 같이 변경한다.
"start" : "node app.js" → "start" : "nodemon app.js"
•
Command + Save를 통해서 작성한 코드를 저장하게 되면 수정된 코드로 자동으로 Run하게 된다.
Types of Errors
1.
Syntax Errors
•
Error Message Exists
•
Easy to Find
2.
Runtime Errors
•
Error Message Exists
•
More Hard to Find
3.
Logical Errors
•
No Error Message
•
Difficult to Find
Restarting the Debugger Automatically After Editing our App
1.
VS Code → Add Configuration → Node.js로 설정 파일을 생성한다.
2.
.vscode/launch.json에 몇 가지를 추가한다.
•
"restart" : true
•
"runtimeExecutable" : "nodemon"
•
"console" : "integratedTerminal"
** 만일 위와 같이 했는데 디버깅 수행이 안 된다면, nodemon이 Global하게 설치 되지 않은 경우이므로 npm install -g nodemon을 한다.
** 변경 사항이 있다면 nodemon이 서버를 restart하게 되고, 이 때 debugging이 restart 되게 되는 구조이다.
** 단, 위 작업을 수행하고 마쳤을 때, Debugging을 종료하는 것과 Node.js를 종료하는 것은 별도의 작업으로 수행되어 따로 종료해야 하는 것을 명심해야 한다. 이것이 console을 integratedTerminal을 써야하는 이유이다.
** Runtime에 동적으로 조사식을 바꿀 수 있다.