Skip to content

How to package and distribute your apps

Ukjin Yang edited this page Apr 17, 2015 · 39 revisions

빠른 배포

그냥 nw 실행 파일과 .nw 확장자를 가진 압축 파일을 같은 폴더 내에 배치한 다음 배포하면 됩니다.

단, 맥은 틀립니다. 배포할 .nw 앱을 다음과 같이 넣고 이런 경로로 배치하면 됩니다. nwjs.app/Contents/Resources/app.nw

다른 방법으로 패키지를 만들려면 아래를 읽으세요.

추가 파일 준비

The following sub-directories can be put in application's root directory: 다음 하위 폴더를 앱 디렉터리에 첨부할 수 있습니다.

  • node_modules - 당신의 앱에 사용할 node.js 모듈 폴더
  • plugins - NPAPI 플러그인들

nwjc 는 따로 배포할 필요 없습니다.

주의사항: node_module 에 들어간 node.js 모듈이 지원하는 플랫폼을 반드시 체크하세요. 예를 들면, node-email-templates 를 윈도우나 맥에서 npm install 을 통해 설치했다면, 파이썬이 해당 플랫폼에 설치되어 있는지 확인해야 합니다. 파이썬은 윈도우에 기본 설치되어 있지 않습니다. 특히 네이티브 모듈이 들어간 경우 (예:socket.io)는 각 플랫폼별로 가지고 있어야 합니다.

npm install 을 통해 설치하고 정의한 package.json 파일에서 정해진 플랫폼을 확인하고 정확하게 돌아가는 지 확인할 필요가 있습니다.

과정 1: 패키지 만들기

패키지 시스템은 LÖVE 와 비슷한 방법을 따릅니다. 해당 Wiki 에 있는 방법을 이 앱에 맞춰 가이드를 제시합니다.

앱을 패키지하기 위해 .nw 파일로 zip 압축 시 다음 3가지 사항이 지켜져야 합니다.

  • 반드시 package.json 파일이 있고 정의되어야 합니다. 매니페스트 형식을 참고하세요.
  • package.json 파일은 반드시 앱 최상위 폴더에 위치되어야 합니다.
  • 파일 속 모든 파일 및 폴더는 대소문자를 구분합니다. 윈도우 이용자에게는 해당사항이 없으나, 맥 또는 리눅스는 대소문자를 구분하기 때문에 앱 안에서 지정된 경로가 정확하게 위치하고 가리키는지 확인해야 합니다.

이제 이렇게 만들어진 .nw 파일을 실행 파일로 만들어 보겠습니다.

윈도우즈

  1. zip 파일을 만듭니다. (윈도우 XP 이상은 내장되어 있습니다.)
  2. 앱에 필요한 모든 파일을 zip 파일 속에 넣고, 특히 package.json 파일은 앱의 최상위 폴더에 위치했는지 확인하시기 바랍니다. 그렇지 않을경우 앱이 동작하지 않습니다.
  3. zip 파일을 .nw 확장자로 변경합니다. 컴퓨터에 따라 zip 파일 확장자가 숨겨질 수 있습니다. 이 경우에는 폴더 옵션에 "보기" 탭에 "알려진 파일 형식의 확장자 숨기기" 를 체크 해제하시기 바랍니다.

리눅스 및 맥

터미널을 활용합니다.

  1. 앱 디렉토리로 이동합니다. cd ~/Projects/my_app
  2. 압축 명령어를 실행합니다. zip -r ../${PWD##*/}.nw *
  3. 압축한 .nw 확장자를 가진 파일을 별도의 폴더로 끄집어 냅니다.
  4. 참 쉽죠?

과정 2a: nw 실행 파일과 같이 앱 파일 놓기

  • package.nw 파일로 변경한 다음 nw 실행 파일과 같은 곳에 옮길 수 있습니다.
  • 아니면 실행 파일이 있는 폴더에 그냥 package.json 파일을 넣고 그 기준으로 앱을 통째로 위치시킬 수도 있습니다. 기본적으로 nw 실행 파일은 그냥 실행 시 같은 폴더 내에 있는 package.json 을 먼저 찾습니다.(맥에서는 node-webkit.app 패키지 안에 있는 최상위 폴더 넣어도 같은 효과입니다.) 이런 방법은 앱의 크기가 너무 클 때 추천하는 방법입니다.
  • nodebob 을 통해 윈도우 환경에서 nw.js 앱 빌드를 자동화할 수 있습니다. 현재 버전은 0.1 이며, 윈도우 배치 스크립트 기반입니다.
  • node-webkit-builder & grunt-node-webkit-builder 같은 nw.js 빌드 모듈을 사용하여 grunt 를 통해 크로스 플랫폼으로 앱을 배포하는 과정을 자동화할 수 있습니다. 이 모듈은 자동으로 빌드된 nw.js 바이너리를 먼저 받은 후, 압축을 풀어 배포할 폴더에 압축을 푼 후, 앱 폴더를 app.nw 으로 자동 압축을 걸어 배포할 폴더에 실행 파일과 같이 배치하게 될 것입니다.
  • Nuwk! Nuwk! 모듈은 맥에서 nw.js 앱을 빌드하는 nw.js 기반의 손쉬운 환경을 제공합니다. 테스트와 빌드 과정을 단순화하고, 실행 패키지를 만들고, 아이콘을 첨부하여 앱을 배포하는 과정을 도와줄 겁니다. (아직 알파 단계입니다.)
  • generator-node-webkit 모듈은 yeoman 을 이용하여 크로스 플랫폼으로 패키징을 도와주는 모듈입니다.
  • lein-node-webkit-builder 모듈은 grunt-node-webkit-builder 모듈과 비슷하지만, nw.js 바이너리를 자동으로 다운받고, 멀티 플랫폼으로 빌드하는 과정을 도와줄 것입니다. 하지만 이는 Leiningen 플러그인이 필요하며, ClojureScript 를 이용한 스크립팅에 최적화되어 있습니다.
  • Web2Executable 프로그램은 크로스 플랫폼으로 제공하는 오픈소스 GUI 앱 패키지 매니저입니다. 웹 앱을 단일 파일로 만들어 배포할 수 있도록 도와주고, 단순화할 수 있습니다. 맥과 리눅스는 기본적으로 동작하지만 윈도우는 Pyside가 필요합니다. 아직은 베타이기 때문에 참여와 피드백을 열렬히 환영하고 있습니다.
  • nwjs-shell-builder - nwjs 쉘 스크립트 기반 빌드 툴입니다. 이 스크립트는 빌드 과정을 생성하고, 각 플랫폼별 nw.js 바이너리를 소스 폴더에 다운받아 크로스 플랫폼 배포를 도와줍니다.

과정 2b: 또다른 방법 - .nw 파일 외의 방법으로 실행 파일 만들기

많은 사람들이 최종 사용자에게 앱을 쉽게 실행하는 데 집중하고 있을 겁니다. 이해합니다. 사용자에게 .nw 파일만 딸랑 던지면 아무래도 사용자에겐 nw.js 런타임이 압축 푼 상태로 필요하겠죠. 하지만 nw.js 파일에 앱 .nw 파일을 합쳐서 실행 파일을 만드는 방법이 있습니다.

일반적으로 .nw 파일을 제공하고, 선택사항으로 합쳐진 실행 파일을 각 플랫폼에 제공하는 것이 간편합니다.

아래 두가지 사항을 반드시 체크하세요.

  • 최종 실행 파일은 단일 실행 파일이 될 수 없습니다. 반드시 함께 있는 DLL 파일을 같이 배포해야 합니다.
  • 합쳐진다 해도 여전히 앱 내용을 WinZip 같은 압축 관리 프로그램으로 볼 수 있습니다.

윈도우즈

윈도우 명령 프롬프트에서 이 명령어를 사용하면 됩니다:

copy /b nw.exe+app.nw app.exe 

그리고 app.exe 과 필요한 DLL 파일을 압축하여 배포하면 됩니다. 예. 이렇게 하면 nw.js 의 독잔적 배포가 되겠죠. 하지만 그건 상관하지 않습니다. 이렇게 한다는 것은 각 플랫폼에 하나의 패키지를 배포하거나, 간단하게 .nw 파일만 딸랑 배포할 수 있으니까요.

그리고 반드시 nw.pak 파일이 app.exe 파일과 같이 배포되어야 합니다.

중요 사항: 만약 네이티브 모듈을 사용한다면 배포한 .exe 파일이 반드시 nw.exe 파일이어야 합니다. 이는 node.js 모듈 사용에 기재되어 있습니다. 자세한 사항은 이슈 #199 를 참조하세요.

리눅스

리눅스도 비슷합니다.

cat /usr/bin/nw app.nw > app && chmod +x app 

이렇게 했으면 이제 종속성을 포함하여 패키징을 만들어야 합니다. .deb 패키지를 만든다면 사용자들은 굳이 nw.js 를 따로 설치할 필요가 없겠죠.

한가지 잊지 말아야 할 사실은 nw.pak 파일이 앱 폴더 최상위에 있어야 한다는 것입니다. 안그러면 일부 빈 페이지가 사용자들을 반겨줄 겁니다.

결국 패키지 만들기를 자동화할 스크립트를 제공해야 겠군요. 이는 직접 해결해야 할 문제입니다.

매킨토시

이 가이드는 node-webkit 0.2.4 이상 기준입니다.

맥에서는 node-webkit.app 이 폴더라 쉽게 바꿀 수 있습니다. nw.js 가 자동으로 당신의 앱을 실행시키려면 앱 압축 파일을 Contents/Resources 에 넣고 파일명을 app.nw 라고 명명하면 됩니다. 만약 시작 속도를 개선하고자 한다면 굳이 압축하지 않고 넣어도 됩니다.

그리고 이제 실제 배포본을 만들기 위한 아래 작업을 수행해야 합니다.

  • Contents/Resources/nw.icns: 앱 아이콘 정의
  • Contents/Info.plist: 애플 패키지 정의 파일

Info.plist 파일에 대해서는 패널에 대한 Cocoa 표준 구현 on how 링크를 참조하면 어떻게 앱 정보를 정의하기 위해 수정해야 하는지 기재되어 있습니다. (주: 맥을 몰라 번역이 이상할 수도 있습니다. 한글 설명 있으면 링크 수정해주세요.)

반드시 필요한 파일은?

v0.10.0 부터는, icudtl.dat 파일이 모든 플랫폼에 포함되어야 합니다. 대신 icudt.dll 파일은 필요없게 됐습니다.

그 외 바이너리 파일들은 선택적으로 기능이 필요할 경우 같이 포함시키면 됩니다. 각 플랫폼마다 필요한 파일들을 지금부터 확인해 보겠습니다.

크로미움 엔진 기반이다 보니 다중 오픈 소스 라이선스 때문에 (MIT/LGPL/BSD/Ms-PL 등등...) 파일을 따로 두어야 합니다. (그렇다고 당신이 만든 앱의 소스 코드까지는 영향받지 않습니다.)

윈도우즈

nw.pak 파일과 icudt.dll 파일이 nw.exe 파일과 같은 폴더 내에 있어야 합니다. 이는 중요한 자바스크립트 라이브러리 파일들이며, 네트워크 라이브러리도 포함됩니다.

ffmpegsumo.dll 파일은 미디어를 다루는 파일입니다. <video> 태그와 <audio> 태그를 사용해야 한다면 이 파일이 포함되어야 합니다.

libEGL.dll 파일과 libGLESv2.dll 파일은 WebGL 과 GPU 가속을 위해 필요한 파일입니다. 그리고 D3DCompiler_43.dll 파일과 d3dx9_43.dll 파일은 WebGL을 다양한 하드웨어에 돌리기 위해 반드시 있어야 합니다. 이는 DirectX 재배포 도구(redistributable) 에 포함되어 있습니다.

리눅스

nw.pak 파일은 당연히 nw 실행 파일과 같은 폴더에 있어야 합니다. 비디오와 오디오가 필요하다면 libffmpeg.so 파일이 필요합니다.

매킨토시

그냥 node-webkit.app 패키지 안에 필요한 파일이 모두 들어 있으니 굳이 신경 안 써도 됩니다.

윈도우에서 실행 파일을 만드는 다른 방법

위 방식대로 nw.exe 파일과 app.nw 파일이 합쳐진다 해도, 여전히 nw.pak 파일과 *.dll 파일은 별도로 같이 있어야 최종 사용자에게 가동성이 보장됩니다.

Enigma Virtual Box 라는 소프트웨어는 파일과 레지스트리를 통합한 단일 파일로 패키지할 수 있도록 도와줍니다. 게다가 개인 또는 상업적 목적으로 무료 로 쓸 수 있습니다.

주의! "Enigma Virtual Box" 소프트웨어는 당신의 앱에 대한 어떠한 성능 및 안정성을 보증하지 않습니다. 이 방법을 쓸 경우에 대한 책임은 제작자 자신에게 있습니다!

  1. 소프트웨어를 내려받고 설치합니다.
  2. 시작 메뉴, 프로그램 폴더에 있는 'Enigma Virtual Box' 프로그램을 실행합니다..
  3. 배포용으로 만든 app.exe 파일을 실행 파일로 지정하고 메인 프로그램은 공란으로 남겨둡니다.
  4. 실행 파일과 함께 있는 *.dll 파일과 nw.pak 파일을 드래그 하거나 추가합니다. 'Select Folder' 누를 시 폴더 선택창이 나오면 '%DEFAULT FOLDER' 를 선택 후 'OK' 버튼을 클릭합니다.
  5. 압축 기능 이용 시 'File Options' 버튼을 클릭 후, 'Compress Files'를 선택한 다음, and 'OK' 버튼을 누릅니다.
  6. 나머지 기능 및 설정을 자신에 맞게 구성합니다..
  7. 메인 화면에 있는 커다란 'Process' 버튼을 눌러 패키지를 만듭니다.
  8. 모든 작업이 끝난 후 'Close' 버튼을 누른 후 프로그램을 종료합니다.
  9. app_boxed.exe 파일이 선택한 앱 폴더에 나타날 겁니다.

이제 nw.pak 파일과 *.dll 파일까지 포함된 단일 실행형 app_boxed.exe 파일을 배포하면 됩니다.

패키지를 자동화하고자 한다면 작은 node.js 모듈인 enigmavirtualbox 모듈이 있습니다. Enigma Virtual Box 배포본을 자동으로 다운받고 압축을 푼 다음 패키징하는 방법을 아래에 설명합니다.

  1. npm install -g enigmavirtualbox
  2. enigmavirtualbox gen app.evp app_boxed.exe app.exe nw.pak icudtl.dat ffmpegsumo.dll libEGL.dll libGLESv2.dll (설정 파일 생성)
  3. enigmavirtualbox gui app.evp (사후 설정 편집을 위한 명령)
  4. enigmavirtualbox cli app.evp (단일 실행 파일 생성)

3번까지 과정으로 app.evp 설정 파일이 생긴 이후 재배포 시 4번 과정만 수행하면 됩니다.

윈도우 설치 패키지

위와 같은 단일 패키지 배포 대신 사용자에게 쉽게 설치하는 환경을 만들 수 있습니다. 무료 설치 패키지 제작 프로그램인 Inno Setup이 쉽게 설치 패키지를 만들도록 도와줄 것입니다.

예제 설치 패키지 설정 파일은 다음 링크에 있습니다: https://github.com/SSilence/sum/blob/master/setup.iss

Clone this wiki locally