Node.js 사용해 애플리케이션 내에서 Node.js 모듈을 빌드하고 배포 및 사용하는 방법
웹 서비스 개발과정에 겪게 되는 동시성 처리 과정에 해답으로 2009년 라이언 달(Ryan Dahl)이 개발
비슷한 시기 구글에서 웹 트래픽 처리에 최적화된 크롬 웹 브라우저용 V8 자바 스크립트 엔진 출시
-> 라이언은 웹 클라이언트 개발에 사용되던 V8엔진을 이용해 서버 개발이 가능한 Node.js로 개발하게 된것
[ 용도 ]
실행 파일과 node_modules 폴더가 있다.
node: Node.js 자바스크립트 엔진의 실행 파일
자바스크립트 파일 위치를 넘겨주면 Node.js는 해당 스크립트를 실행한다.
목표 위치가 없으면 직접 작성하고 실행할 수 있는 콜솔이 실행된다.
npm: Node.js 패키지를 관리하기 위해 사용되는 명령 프로그램
node_modules: 설치된 Node.js 패키지를 포함. Node.js 기능을 확장시켜줄 라이브러리와 같이 사용된다.
개인 노드 패키지 모듈에는 패키지 정의 정보를 가진 package.json 파일이 들어 있다.
이름, 버전, 작성자, 기여자 등의 메타데이터 정보가 들어 있다.
종속 관계의 패키지 정보와 노드 패키지 관리자가 설치 및 배포과정에 사용하는 추가 정보들도 포함된다.
[ package.json 사용되는 지시어 ] -> 개념 이해
지시어 | 설명 | 사례 |
name | 패키지 고유 이름 | "name" : "blahblah" |
preferGlobal | 전역 설치 선호 표시 | "preferGlobal": true |
version | 모듈 버전 정보 | "version": 0.0.1 |
author | 작성자명 | "author": "blahblah@blahblah.com" |
description | 설명 | - |
contributors | 공헌한 사람들 | - |
bin | 프로젝트와 같이 설치될 바이너리 |
[bin": { "excalibur": "./bin/excalibur"} |
scripts | node 런치 시 사용한 console app |
"scripts" : { "start": "node 위치", "test": "echo testing" } |
main | 바이너리나 .js파일로 구성되는 애플리케이션 메인 진입점 | "main": "./bin/excalibur" |
keywords | npm 검색 시 사용될 키워드 |
"keywords": [ "swallow", "unladen" ] |
dependencies | 종속성 있는 모듈 버전 |
"dependencies": { "express": "latest", "connect": "2.x.x", "cookies": "*" } |
engine | 패키지에 사용된 node 버전 |
"engines": { "node": ">=0.6" } |
npm은 기본적으로 package.json을 찾는다.
모듈 만들기
1. 프로젝트 root 폴더에 새로운 이름에 폴더 생성 (자유)
2. 생성한 폴더에 파일 생성 (ex. censortext.js)
censortext.js
var censoredWords = ["sad", "bad", "mad"];
var customCensoredWords = [];
function censor(inStr) {
for (idx in censoredWords) {
inStr = inStr.replace(censoredWords[idx], "****");
}
for (idx in customCensoredWords) {
inStr = inStr.replace(customCensoredWords[idx], "****");
}
return inStr;
}
function addCensoredWord(word) {
customCensoredWords.push(word);
}
function getCensoredWords() {
return censoredWords.concat(customCensoredWords);
}
exports.censor = censor;
exports.addCensoredWord = addCensoredWord;
exports.getCensoredWords = getCensoredWords;
해당 폴더 안에서 패키지 모듈 제작을 위해 package.json을 생성한다.
name, version, main은 필수로 추가한다.
main - JS 모듈의 이름으로 censortext가 된다.
./package.json
{
"author": "Edward",
"name": "censorify",
"version": "0.0.1",
"description": "Censors words out of text",
"main": "censortext",
"dependencies": {},
"engines": {
"node": "*"
}
}
npm pack 실행 -> 로컬 패키지 모듈 빌드.
+ NPM 레지스트리에 발행하고 싶은분들은 읽으시면 됩니다.
http://npmjs.org 에 위치한 NPM 레지스트리 발행
공개 저장소에 추가 + npmjs 계정 추가
1. github에 저장소 추가
2. https://npmjs.org/signup 계정 생성
3. npm adduser 로 사용자명, 패드워드, 이메일 정보 입력
4. package.json 내용 수정
./package.json
{
"author": "Edward",
"name": "censorify",
"version": "0.0.1",
"description": "Censors words out of text",
"main": "censortext",
"repository": {
"type": "git",
"url": "git@github.com:donghyunele/JS.git"
},
"keywords": [
"censor",
"words"
],
"dependencies": {},
"engines": {
"node": "*"
}
}
5. npm publish 실행 => NPM 레지스트리상의 검색 (npm search) 통해 모듈 찾고, npm install로 설치 가능.
[ 제거를 원할 경우 ]
npm unpublish project name
+ 강제로 해야하는 경우
npm unpublish censorify --force
패키지 모듈 사용하는 방법
애플리케이션에 모듈을 설치하고 require() 함수를 사용해 모듈을 로딩해 사용한다.
사용법
폴더 생성
./readwords 이름의 프로젝트 생성
npm install 프로젝트 이름 or np install ../censorify/censorify-0.0.1.tgz
=> npm i 이런식으로 줄일 수 있다.
./readwords.js
var censor = require('censorify');
console.log(censor.getCensoredWords());
console.log(censor.censor("Some very sad, bad and mad text"));
censor.addCensoredWord("gloomy");
console.log(censor.getCensoredWords());
console.log(censor.censor("A very gloomy day."));
콘솔에 데이터 쓰기
콘솔 모듈 - 디버그나 정보를 콘솔에 출력하기 위한 기능
결과 값, 시간 변화정보, traceback, assertion 출력
함수 | 명세 |
log([데이터], [...]) |
콘솔에 결과 값 출력 데이터 변수로 문자열이나 변환 가능한 객체 사용 가능 console.log("There are %d items", 5); |
info([데이터], [...]) | log와 동일 |
error([데이터], [...]) | log와 info와 동일, 결과 값이 stderr로 출력 |
warn([데이터], [...]) | log와 동일 |
dir(오브젝트) | 객체의 문자열 표시 형식으로 콘솔에 출력 console.dir({name: "Brad", role: "Author"}); |
time(라벨) | label 문자열에 밀리 초 단위의 현재 타임 스탬프를 할당함 |
timeEnd(라벨) | 현재 시간과 label에 타임 스탬프로 지정한 시간과의 차이를 결과로 출력 console.time("FileWrite"); f.write(data); //takes about 500ms console.log("FileWrite"); >> FileWrite: 500ms |
trace(라벨) | 코드 내 현재 위치에서의 스택 추적 정보를 stderr에 출력 module.trace("traceMark"); >> Trace: traceMark at Object.<anonymous> (C:\test.js:24:9) at Module._comile (module.js:456:26) at Object.Module._ext.js (module.js:474:10) |
assert([표현식], [메시지]) | expression이 false인 경우 message와 스택 추적 정보를 콘솔에 출력 |
2장) 자바스크립트 기본 학습 (2) (0) | 2019.12.20 |
---|---|
2장) 자바스크립트 기본 학습 (1) (0) | 2019.12.20 |
1장) Node.js-to-AngularJS 스택 소개 (0) | 2019.12.19 |
ep) 책 소개 (0) | 2019.12.19 |