Node.js : 설치(Windows 7 64bit 기준), npm과 package.json 해부
목차
Node.js , npm설치
- Windows
- Mac(OS X)
- 다운로드 후 그냥 설치 : https://nodejs.org/en/download/
- 설치 후 메시지 :
Node.js was installed at
/usr/local/bin/node
npm was installed at
/usr/local/bin/npm
Make sure that /usr/local/bin is in your $PATH.
npm 세팅, package.json 해부
- npm의 약자 : Node Package Manager
- 공식문서 : https://docs.npmjs.com/files/package.json
- 이 npm의 설치는 위의 node.js 설치가 완료 되었다는 전재 하에서 진행 되어야 한다.
- npm 세팅하기 전의 node.js코딩이 된 js파일의 실행은 node index.js 방식으로 실행이 가능하나, npm 세팅 후에는 실전용으로는 npm start , 테스트용으로는 npm test 등의 명령으로 내가 세팅한 node명령어를 간단히 실행할 수 있다.
- 명령 프롬프트를 열고 아래처럼 명령을 따라 해 본다. 필자는 폴더를 저렇게 했는데, 편한대로 아무 경로 지정하면 될 듯 하다.
- 굵은 글씨를 따라 쳐보면 새로운 폴더를 만들고 그 폴더를 들어가서 npm을 초기화 한다는 의미이다.
C:\Users\TSPark\Documents\Blog\naver\170603_nodejs>mkdir nodeServer C:\Users\TSPark\Documents\Blog\naver\170603_nodejs>cd nodeServer C:\Users\TSPark\Documents\Blog\naver\170603_nodejs\nodeServer>npm init
- 그러면 npm에서는 대략 이러한 내용을 얘기해준다.
'이 폴더에 package.json 이라는 파일을 만들거다'
'이제부터 이 package.json 이라는 파일을 내가 함 해 줄 테니 너는 묻는 말에 대답만 해라.'
'이 설정 이후에는 npm을 이용해서 이 폴더 안에서 쓰일 node.js 라이브러리들을 설치하게 되었을 때 그에 대한 정보들이 package.json에 자동으로 수록될 것이다'
'근데 내가 묻는게 귀찮다면 Ctrl + C를 눌러서 나가도 된다'
This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (nodeServer)
- 나는 npm이 묻는말에 성심성의껏 답해줬다. 이거때메 GitHub Repository도 새로 팠다.(기존에 안쓰는걸 고친거지만)
- 묻는 것에 대답을 잘 해줬더니 package.json에서 아래와 같이 JSON형태로 작성해주었고, 이제 이 정보를 토대로 나의 node.js 프로젝트가 관리 될 것이다.
Press ^C at any time to quit. name: (nodeServer) nodeServer Sorry, name can no longer contain capital letters. name: (nodeServer) node_server version: (1.0.0) description: Node.js Server Practice entry point: (index.js) app.js test command: node app.js git repository: https://github.com/geoseong/Node.js-Test.git keywords: nodejs,test,tspark author: tspark license: (ISC) About to write to C:\Users\TSPark\Documents\Blog\naver\170603_nodejs\nodeServer\ package.json: { "name": "node_server", "version": "1.0.0", "description": "Node.js Server Practice", "main": "app.js", "scripts": { "test": "node app.js" }, "repository": { "type": "git", "url": "git+https://github.com/geoseong/Node.js-Test.git" }, "keywords": [ "nodejs", "test", "tspark" ], "author": "tspark", "license": "ISC", "bugs": { "url": "https://github.com/geoseong/Node.js-Test/issues" }, "homepage": "https://github.com/geoseong/Node.js-Test#readme" } Is this ok? (yes)
- npm이 나에게 물어본 것(package.json작성을 위해) :
- name : 말그대로 내 프로젝트 이름짓기. 대문자는 허용안된다. 내가 대문자 써서 빠꾸먹은거를 봤듯이..
- version : 실제 배포되는 소프트웨어가 패치가 될 수록 버전이 올라가는것처럼, 내가 작성하는 프로젝트에 버전을 매긴다. 정말 미천한 내가 패치를 위한 버전관리를 한다고? ㄷㄷ 라고 생각할 수 있지만 개발자의 길에 들어선 순간 패치는 수도없이 할 것이기 때문에 버전을 물어보는 것이다.
- description : 프로젝트에 대한 설명.
- entry point : package.json의 main 에 들어갈 js파일을 지정함과 동시에, 지정된 js파일에서 export되는 객체들을 다른 사용자가 사용할 수 있게 지정하는 영역이다.
- 마치 JAVA에서 클래스를 import하고 그 클래스의 어떤 메소드를 쓰게 할 지 등록하는 역할이라고 생각하면 이해가 될 것 같다. 나만 이해가나? ㅋ
- 예를 들어 app.js파일이 있다고 치자.
1234567891011121314151617181920212223const express = require('express');const router = express.Router();// MySQL model 연동 테스트const controller = require('./user.controller.mysql');/** 모든 사용자 보기 GET **/router.get('/', controller.index);/** 사용자 조회 GET **/router.get('/:id', controller.show);/** 사용자 삭제 DELETE **/// 아래 users배열을 자바스크립트 함수 findIndex(), splice() 메소드를 이용해서 제거.router.delete('/:id', controller.destroy);/** 사용자 추가 POST **/router.post('/', controller.create);/** 사용자 정보 수정 PUT */router.put('/:id', controller.update);module.exports = router;cs - 지금 app.js안에서 정의된 router객체의 메소드들을 module.exports = router 로 export하면, 아래 코드에서 정의된 get(), delete(), post(), put() 메소드를 다른 사용자가 사용할 수 있게 되는 것이다.
- 그러면 지금 내가 만든 패키지(라이브러리) 이름 name 은 node_server 이므로, 내 라이브러리를 쓰는 사람은 이런 식으로 사용이 가능할 것이다.
1234567const nodeServer = require('node_server');const controller = require('./user.controller.mysql');nodeServer.get('/:id', controller.show);nodeServer.delete('/:id', controller.destroy);nodeServer.post('/', controller.create);nodeServer.put('/:id', controller.update);cs -
test command : package.json의 scripts 에 들어갈 node 커맨드를 입력하는 영역이다. scripts안의 test명령어는 말그대로 테스트를 위한 커맨드이고, start는 실제로 해당 node 라이브러리라던가 node서버를 켜는 명령어를 설정하면 되겠다.
이와 관련된 공식문서를 보면서 좀 파봐야될 필요가 있을 것 같다. ㅋ
https://docs.npmjs.com/misc/scripts - git repository : 해당 프로젝트와 연관된 git repository를 설정한다. 이 설정을 하고나서 지금 프로젝트 폴더경로에서(중요) npm docs 입력을 하면 package.json의 homepage 에 있는 주소로 자신이 설정한 기본 웹브라우저에 이동된다.
- keywords : 내 라이브러리가 오픈소스로 온라인에 올라갔을때 검색되는 단어를 설정하는 부분이다.
- 배열형태로 저장이 되며, 쉼표(',')로 구분을 지으면 알아서 배열형태로 값이 들어간다.
- 만약 이 라이브러리를 오픈소스로 등록했을 때, 사용자는 npm search tspark 입력을 하게 되었을때 리스트에 나의 라이브러리가 검색이 될 것이다.
- 기존에 존재하는 라이브러리를 검색하고 싶다면 npm search async 를 검색해보라. async가 들어간 라이브러리들 리스트들이 검색되어 나올 것이다.
- author : 작성자. 내이름으로 하거나 프로젝트팀 이름으로 하거나 맘대로..
- license : 기본값은 ISC이다.
- 만약 내가 만든 이 패키지(라이브러리)를 오픈소스로 공개하게 되었을때, 다른 사람이 나의 이 라이브러리를 사용하게 된다면, 그 사용자가 어디까지의 권한을 얻을 수 있는지와 제약조건을 설정하는 영역이다.
- 권한과 제약조건에 대한 라이센스 적용은 OSI가 승인한 라이센스에서 적용시키는게 이상적이라고 한다. 해당 url에서 확인해서 적용해 보시라.
- url : https://spdx.org/licenses/
'Node.js' 카테고리의 다른 글
Node.js : npm install , outdated&update, uninstall 명령을 이용한 node 패키지관리 (0) | 2017.07.21 |
---|---|
Node.js : 간단 웹서버 구동하기 예제 (0) | 2017.06.04 |