이번에는 NodeJS 프로그램을 실행 가능한 바이너리 프로그램으로 만들어, 소스가 외부에 공개되지않고 NodeJS 설치 없이 실행할 수 있는 방법을 설명드리겠습니다.
Executable file로 만들기 위해서 저는 Pkg 라이브러리를 사용했습니다. 릴리즈 버전이 4.4.0번으로 라이브러리가 어느 정도 안정화 되어있다고 생각됩니다.
본 포스트에서 사용하는 예시 프로그램은 블로그에 연재하고 있는 NestJS 기반 API 서버입니다.
Typescript 기반으로 간단한 회원가입 API와 로그인 API가 구현되어있습니다.
해당 프로그램을 실행파일로 만들기 위해서 우선 Pkg 라이브러리를 전역으로 설치해줍니다.
npm install -g pkg
그 다음엔 package.json 파일을 다음과 같이 수정해줍니다.
{
"name": "board-api",
"version": "0.0.1",
"description": "",
"author": "",
"license": "MIT",
"bin": {
"app": "./dist/main.js"
},
"scripts": {
"build": "tsc -p tsconfig.build.json",
"build:package": "tsc -p tsconfig.build.json && pkg .",
"format": "prettier --write \"src/**/*.ts\"",
"start": "ts-node -r tsconfig-paths/register src/main.ts",
"start:dev": "nodemon",
"start:debug": "nodemon --config nodemon-debug.json",
"prestart:prod": "rimraf dist && npm run build",
"start:prod": "node dist/main.js",
"lint": "tslint -p tsconfig.json -c tslint.json",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "^6.0.0",
"@nestjs/core": "^6.0.0",
"@nestjs/platform-express": "^6.0.0",
"@nestjs/typeorm": "^6.0.0",
"bcryptjs": "^2.4.3",
"joi": "^14.3.1",
"mysql": "^2.17.1",
"redis": "^2.8.0",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.3.3",
"typeorm": "^0.2.16",
"uuid": "^3.3.2"
},
"devDependencies": {
....... // 생략
},
"jest": {
........ // 생략
}
}
주요하게 볼 부분은 다음과 같습니다.
"bin": {
"app": "./dist/main.js" // 실행 가능한 바이너리 파일을 만들기 위해, 현재 어플리케이션의 엔트리 포인트 파일 경로 설정
},
"scripts": {
"build:package": "tsc -p tsconfig.build.json && pkg .", // typescript로 개발되어있기에, 한번 빌드를 하고, 빌드된 결과물을 바탕으로 패키징 작업 실행
},
소스 디렉토리에서 pkg . 명령어를 실행하면, pkg는 현재 디렉토리를 바탕으로 package.json 파일을 찾아 bin 설정 정보를 읽어옵니다. 패키징할 어플리케이션의 메인 엔트리 파일은 무엇인지, 패키징할때 포함되어야할 assets 파일들은 무엇이 있는지 등 모든 설정 정보를 확인한 후에 이를 바탕으로 실행파일을 만듭니다. pkg는 linux, macOS, window 환경을 대상으로 실행 파일을 만들며 옵션을 통해 세부적인 운영 환경 설정이 가능합니다.
npm run build:package // 이 명령어를 통해 타입스크립트 파일을 빌드하고, 빌드 결과물을 pkg로 패키징합니다.
위 명령어를 실행하면 어플리케이션이 빌드되고, 각 운영체제에 맞게 패키징이 됩니다. 어플리케이션을 빌드하고 패키징하여 실행시켜보는 과정은 아래 영상을 보시면 됩니다.
'Programming > Nodejs' 카테고리의 다른 글
[NodeJS] APK 파싱 (2) | 2019.06.03 |
---|---|
[NestJS] AWS S3 Image Upload (0) | 2019.06.03 |
NodeJS AES 256 암복호화 코드 (3) | 2019.06.03 |
[NestJS 기반 게시판 REST API 만들기] 3. 회원가입 및 로그인, 파라미터 검증 및 예외 처리 (6) | 2019.05.08 |
[NestJS 기반 게시판 REST API 만들기] 2. 회원가입 및 로그인 기능 을 위한 DB 연동 (3) | 2019.04.30 |