저는 Node.js 프로그래밍을 처음 접했고 최근에 (익스프레스, 백본 및 기타 무료보기 기술, mongoDB 포함)을 사용하여 샘플 작업 웹 애플리케이션을 만들었습니다. 이제 스테이징 환경에 동일하게 배포하고 싶은 시점에이 애플리케이션을 패키징하고 배포하는 방법을 잘 모르겠습니다. [mongoDb 관리 및 별도 설정 가능]
저는 Java 세계에서 왔으며 거기에서 서블릿 컨테이너에 배포되는 웹 응용 프로그램을위한 재사용 가능한 라이브러리 및 war / ear 패키지를위한 jar를 만듭니다. 이제이 경우 node.js 자체가 웹 컨테이너 역할을하므로 웹앱을 어떻게 패키징합니까?
- Express를 사용하여 빌드 된 패키징 노드 웹앱의 표준 형식 / 가이드 라인이 있습니까? (노드 앱을위한 유사한 jar / war 패키징 시스템이 있습니까?)
- 패키징 된 후 어떻게 배포합니까? 자체 컨테이너이기 때문에 exe가 될까요?
추신 : 지금은 필요한 모든 소스 파일을 스테이징 환경에 수동으로 복사하고 npm 명령을 실행하여 해당 컴퓨터의 모든 종속성을 다운로드 한 다음 ‘영구’또는 다른 메커니즘을 사용하여 내 server.js를 실행할 생각입니다. (또한 앱이 충돌하고 영원히 실패하는 경우에 대비하여 일종의 모니터링을 추가하십시오) 이것이 올바른 방법인지 확실하지 않습니까? 이 문제를 해결하는 표준화 된 방법이 있어야한다고 확신합니다.
답변
답변
Node.js
애플리케이션 배포 는 매우 쉬운 일입니다. Maven에는 pom.xml
. 의 관련 개념은 Node.js
입니다 package.json
. 에 대한 종속성을 지정할 수 있습니다 package.json
. 에서 환경 설정을 수행 할 수도 있습니다 package.json
. 예를 들어 개발 환경에서는 다음과 같이 말할 수 있습니다.
단위 테스트를 실행하고 싶습니다.
그러나 생산 중;
단위 테스트를 건너 뛰고 싶습니다.
.m2
폴더 아래에 maven에 대한 로컬 저장소가 있습니다. Node.js에는 node_modules
Node.js 프로젝트 아래 에 폴더가 있습니다. 이름으로 모듈 폴더를 볼 수 있습니다.
grunt
이 답변 의 일부로 갑시다 . Grunt
프론트 엔드 자산, html, javascript, css에 대한 작업 관리자입니다. 예를 들어 배포하기 전에 html, css, javascript 이미지를 축소 할 수 있습니다. 또한 넣을 수 있습니다 grunt
에서 작업 실행 기능을 package.json
.
샘플 애플리케이션을 보려면 여기 에서 예제 블로그 애플리케이션을 찾을 수 있습니다 . 폴더 구조 및 package.json
참조를 확인하십시오 .
배포의 경우 시작 응용 프로그램을위한 heroku 배포를 제안합니다. 여기에서 방법을 찾을 수 있습니다 . 이것은 간단한 git 기반 배포입니다.
프로젝트 실행 부분에서 환경을 설정 NODE_ENV=development
하고 node app.js
. 여기 app.js
당신의 프로젝트에 있습니다.
다음은 java 및 nodejs에 대한 상대적 개념입니다.
maven clean install
=>npm install
.m2
폴더 =>node_modules
(프로젝트 폴더 아래)mvn test
=>npm test
(의 테스트 섹션package.json
)junit
,,powermock
… => mocha , node-unit , …Spring MVC
=> Express.JSpom.xml
=>package.json
import package
=>require('module_name')
답변
- Express를 사용하여 빌드 된 패키징 노드 웹앱의 표준 형식 / 가이드 라인이 있습니까? (노드 앱을위한 유사한 jar / war 패키징 시스템이 있습니까?)
예, CommonJS 패키지 사양 :
이 사양은 CommonJS 프로그램 및 라이브러리 배포를위한 CommonJS 패키지 형식을 설명합니다. CommonJS 패키지는 모듈, 코드 및 기타 자산 모음을 단일 형식으로 일관되게 래핑 한 것입니다. CommonJS 구성 요소의 편리한 전달, 설치 및 관리를위한 기반을 제공합니다.
다음 질문 :
2. 패키징 된 후 어떻게 배포합니까? 자체 컨테이너이기 때문에 exe가 될까요?
나는 생산을 위해 Heroku 에 배포하라는 Hüseyin의 제안을 두 번째로 합니다. 개발 및 준비를 위해 각각 VirtualBox 및 Amazon EC2와 함께 Node-Appliance 를 사용합니다 .
이 프로그램은 build-debian-cloud 또는 Debian-VirtualBox-Appliance에 의해 구축 된 Debian 머신을 가져 와서 git을 통해 배포 된 Node 애플리케이션을 실행할 수있는 Node.js “appliance”로 변환합니다.
웹앱은 exe
.
답변
이것이 해결책을 찾는 누군가에게 도움이되기를 바랍니다. Node js 앱의 패키징은 “npm pack”명령을 사용하여 수행 할 수 있습니다. 프로덕션 / 스테이징 환경에서 실행할 수있는 애플리케이션의 zip 파일을 생성합니다.
답변
이에 접근하는 몇 가지 방법 :
-
코드가 아닌 모든 것을 제외하고 (
node_modules/**
) Git 리포지토리로 코드를 푸시 한 다음 스테이징 환경에서 가져와 실행npm install
하여 모든 종속성을 복원합니다. -
그것으로부터 NPM 패키지를 생성하고,
npm
당신의 스테이징 환경에서 그것을 통해 설치하십시오 (이것은 또한 모든 의존성을 처리해야합니다) -
Grunt
다음을 통해 종속성을 복원하는 것보다 스테이징 환경에 수동 복사 / ssh 파일 (로 자동화 가능 )npm
답변
zeit의 pkg 모듈을 사용했습니다. linux / win / macos를위한 크로스 플랫폼 결과물을 생성 할 수 있습니다. 실제로 프로덕션에서 사용했으며 문제없이 잘 작동합니다.
모든 js 스크립트를 가져 와서 단일 파일로 패키징합니다.
내가 사용한 이유는 소스 코드 보안에 도움이되기 때문입니다. 이렇게하면 고객 환경에서 프로덕션 환경에서 애플리케이션에 액세스 할 수 있지만 소스 코드에는 액세스 할 수 없습니다.
또한 장점 중 하나는 프로덕션 환경에서 노드 바이너리도 빌드 내부에 패키징되기 때문에 실제로 고객이 node.js를 설치할 필요가 없다는 것입니다.