node.js 앱에서 exe 파일을 만드는 방법은 무엇입니까?


123

내가 작성한 노드 앱이 있으며 다음과 같이 실행됩니다.

node.exe app.js inputArg

이것을 .exe로 패키징 할 수있는 방법이 있습니까? 그래서 그냥 이렇게 할 수 있나요?

App.exe inputArg

배치 파일을 사용하여이를 속일 수있는 방법이 있으므로 다음과 같이 할 수 있습니다.

App.bat inputArg

그러나이를 위해서는 해당 폴더에 모든 종속성과 노드가 있어야하며 이는 이상적이지 않습니다.




좋은 도구 목록은 다음과 같습니다. stackoverflow.com/a/12486874/32679
GrGr

1
여기에 답변을 추가하는 사람은 이미 완료되었는지 고려할 필요가 있다고 생각합니다. 이 질문은 다양한 품질 / 활동의 다양한 오픈 소스 제품에 대한 링크 더미로 바뀌고 있습니다.
Liam

답변:


35

무료 및 상업적인 몇 가지 대안이 있습니다. 나는 그들 중 어느 것도 사용하지 않았지만 이론적으로는 작동해야합니다.

대부분의 경우 배치 파일을 기본 실행 파일로 유지 한 다음 node.exe와 스크립트를 번들링해야합니다.

스크립트에 따라 실행 파일을 생성 하는 쉬운 방법을 지원하는 JSDB 로 이식하는 옵션도 있습니다. 리소스를 추가 .

세 번째 준 해결책은 노드를 같은 곳에 유지 C:\utils하고이 폴더를 PATH환경 변수에 추가하는 것 입니다. 그런 다음 노드 + 선호하는 스크립트를 실행하는 해당 디렉토리에 .bat 파일을 만들 수 있습니다 coffee.이 방법으로 coffeescript가 Windows에서 작동합니다. 이 설정은 배치 파일, vb 스크립트 또는 설치 프로그램을 사용하여 자동화 할 수 있습니다.


이것들은 좋아 보이고 내가 원하는 것을 할 수있는 것처럼 보입니다. 나는 그것을 시도하고 당신에게 돌아갈 것입니다.
Aishwar

2
"고급"Batch To EXE 변환기를 사용해 보았는데 매력처럼 작동했습니다. 종속성을 EXE 파일로 패키징 할 수 있습니다. 도와 주셔서 감사합니다.
Aishwar

1
@Aishwar,하지만 node_modules 폴더를 번들로 묶을 수 없기 때문에 고급 작업을 할 수 없습니다.
Clint

node_modules를 zip / rar로 압축하고 애플리케이션이 실행될 때 임시 디렉토리에 압축을 풀면 어떨까요? 하지만 모듈이 많으면 약간 느려질 수 있습니다.
Jarrod Mosen 2014

55

제가 사용한 솔루션은 Roger Wang의 node-webkit입니다. 입니다.

이는 nodejs 앱을 패키징하고 배포하는 환상적인 방법이며 전체 앱을 단일 실행 파일로 "번들"하는 옵션도 제공합니다. Windows, Mac 및 Linux를 지원합니다.

다음 은 node-webkit 앱을 배포하기위한 다양한 옵션에 대한 몇 가지 문서이지만 간단히 말해서 다음을 수행합니다.

  1. 루트에 package.json을 사용하여 모든 파일을 압축합니다.
  2. 확장자를 .zip에서 .nw로 변경합니다.
  3. 복사 / b nw.exe + app.nw app.exe

추가 된 메모처럼-나는 이것을 사용하여 여러 생산 상자 / 설치 CD 응용 프로그램을 출하했으며 훌륭하게 작동했습니다. 동일한 앱이 Windows, Mac, Linux 및 웹에서 실행됩니다.

업데이트 : 프로젝트 이름이 'nw.js'로 변경되었으며 여기에 올바르게 위치합니다 : nw.js


1
그냥 시도하고 훌륭하게 작동했습니다! 인텔의 사람들이 지원합니다.
Timo Huovinen 2014

이것은 오늘 현재 정확하고 가장 최신의 답변이어야합니다. 여기에서 노드 웹킷 치트 시트를 참조하십시오. gist.github.com/LeCoupa/80eca2716a2b13c37cce JS 컴파일 방법과 같은 다른 매우 유용한 내용을 포함합니다 (또는 최소한 단어에 대해 원하는 구식에 따라 바이트 코드로 크런치 다운합니다. "엮다").
Erik Reppen 2015

나는이 대답을 좋아하지만 여전히 독립 실행 형 exe를 생성하지 않습니다. Github의 Intelnw.js에 따르면 동일한 폴더에 nw.pak 및 icudt.dll이라는 두 개 이상의 다른 파일이 있어야합니다. 독립 실행 형 exe는 어떻게 생성합니까?
Jeff Baker

: 당신은 GitHub의에 문서에서 조금 아래를 보면 @JeffBaker, 당신이 볼 수 github.com/nwjs/nw.js/wiki/... 추가 파일을 포함하고 싶지 않는 경우에 당신이 할 수 있습니다.
Clayton Gulick

@Clayton, Nw.js는 chrome.com에서도 볼 수 있습니다. developer.chrome.com/apps/migration#native
Pacerier 2017 년

29

이 질문에 걸림돌이되는 사람에게는 이제 노드 프로젝트에서 exe를 생성하는 두 개의 프로젝트 인 PkgElectron.atom.io가 있지만 약간 다릅니다.

  1. Pkg 는 프로젝트를 네이티브 코드로 컴파일하고 자산과 nodejs 설치도 포함합니다 (시스템은 .exe를 실행하기 위해 nodejs를 설치할 필요가 없습니다). 소스 코드는 포함되지 않습니다. 결과 실행 파일은 Windows 전용 (.exe)입니다. 이제 모든 플랫폼이 지원됩니다. 이제 상용 제품에 대한 라이센스가 필요합니다. 완전 오픈 소스.
  2. Electron.atom.io 는 압축되지 않고 .exe를 생성하지만, nodejs 앱은 애플리케이션 배포 방법을 제공하므로 배포하는 데 사용할 수 있습니다 . 장점은 electron이 다중 플랫폼 (windows, mac osx, linux)이고 단점은 소스 코드가 포함된다는 것입니다. 심지어 asar 아카이브 내에서 앱을 배포 할 수있는 방법을 제공하기는 어렵습니다 . 방탄은 아니지만 평범한 소스보다 여전히 낫습니다.

2
업데이트하십시오 : EncloseJS는 현재 Linux 및 OS X를 지원합니다.
000000000000000000000

댓글 수정! @ 000000000000000000000
sokie 2016-06-07

EncloseJS는 갈 길입니다. 나는 지금 그것을 시도 할 것입니다! 답변을 추가해 주셔서 감사합니다! +1 :)
tftd 2016 년

EncloseJS를 설치할 수 없습니다. 유용한 오류 메시지없이 Err code ELIFECYCLE이라고 말합니다.
Elmue

2
EncloseJS는 더 이상 유지되지 않습니다. 상속인은 zeit / pkg ( npmjs.com/package/pkg ) 인 것으로 보입니다
Lucas Gonze

21

기본적으로 Windows는 .js파일을 Microsoft의 독립 실행 형 JS 런타임 엔진 인 Windows Script Host 와 연결 합니다 . 명령 프롬프트에서 script.js 를 입력 하거나 .js탐색기 에서 파일을 두 번 클릭 하면 스크립트가 wscript.exe.

이것은 전역 설정으로 로컬 문제를 해결할 수 있지만 대신 파일을 연결 하여 script.js 를 입력 할 수 있습니다..jsnode.exe 명령 프롬프트에서 하거나 스크립트에 항목을 두 번 클릭 / 드래그하면 와 함께 시작됩니다.

물론, 저처럼 .js파일을 편집기와 연결하여 파일을 두 번 클릭하면 좋아하는 텍스트 편집기가 열리면이 제안은 별 효과가 없습니다. "노드로 실행" 의 마우스 오른쪽 버튼 클릭 메뉴 항목.js파일에 추가 할 수도 있지만이 대안은 명령 줄 요구 사항을 해결하지 못합니다.


가장 간단한 해결책은 아마도 배치 파일을 사용하는 것입니다. 스크립트가있는 폴더에 Node의 복사본이있을 필요는 없습니다. Node 실행 파일을 절대적으로 참조하십시오.

"C:\Program Files (x86)\nodejs\node.exe" app.js %*

또 다른 대안은 .js실행할 스크립트로 자체 파일 이름 + 를 사용하여 Node를 시작 하고 모든 명령 줄 인수를 전달 하는 매우 간단한 C # 앱입니다 .

class Program
{
    static void Main(string[] args)
    {
        var info = System.Diagnostics.Process.GetCurrentProcess();
        var proc = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\nodejs\node.exe", "\"" + info.ProcessName + ".js\" " + String.Join(" ", args));
        proc.UseShellExecute = false;
        System.Diagnostics.Process.Start(proc);
    }
}

따라서 결과 EXE의 이름을 "app.exe"로 지정하면 입력 할 수 app arg1 ...있으며 Node는 명령 줄로 시작됩니다 "app.js" arg1 .... C # 부트 스트 래퍼 앱은 즉시 종료되고 Node는 콘솔 창을 담당합니다.

이것은 아마도 상대적으로 많은 관심을 가질 것이기 때문에 , 낯선 사람과 함께 밴에 타는 것이 당신의 일이라면 컴파일 된 exe를 포함하여 이것을 GitHub 에서 사용할 수 있도록했습니다 .


언급했듯이 이것은 내 문제를 이상적인 방식으로 해결하지 못합니다. 그러나 흥미로운 읽기에 대한 +1
Aishwar

@Aishwar, Node를 시작하는 간단한 앱을 추가했습니다. 편집 내용을 참조하십시오.
josh3736 04:39에

@ josh3736 exe는 여전히 동일한 폴더에 node.exe가 있어야합니까?
Ricardo Tomasi 2011

@RicardoTomasi, 아니. Node가 시스템의 Program Files 디렉토리 (설치 프로그램이 위치)에 설치되어 있다고 가정합니다.
josh3736

@ josh3736 이것은 흥미로운 솔루션입니다. 나는 당신이 한 일을 좋아합니다. 나는 다시 +1 할 수 있기를 바랍니다. 그러나 이것은 사용자가 node.js를 표준 경로에 설치해야하기 때문에 여전히 이상적이지 않습니다.
Aishwar

20

내가 아는 최고의 도구는 NodeJS 도구입니다. zeit / pkg

사용하기가 매우 쉽고 (예를 들어 Nexe보다 훨씬 더 많음) 전역 적으로 설치할 수 있습니다. npm install -g pkg

macOS, Linux 및 Windows 용 실행 파일을 만들려면 :

pkg exampleApp.js

나는 NodeJS 소켓 서버를 사용하는 약간의 복잡한 코드를 가지고 있었고 다른 응용 프로그램을 시도했지만 zeit / pkg를 제외하고는 제대로 만들지 못했습니다 .


Appium 설치를 Exe 파일로 압축하려고했는데 zeit / pkg가 완전히 실패했습니다. 디스크의 310MB에서 18MB의 작은 Exe 파일이 생성되었지만 분명히 전혀 작동하지 않았습니다.
Elmue


12

이 질문에 대한 답변을받은 이후 다른 솔루션이 출시되었습니다.

https://github.com/appjs/appjs

이 글을 쓰는 시점에서 이것은 실행 파일로 컴파일 된 제거 된 크롬 패키지를 통해 node.js 앱을 패키징하는 최종 솔루션입니다.

편집 : AppJS는 더 이상 활성화되지 않지만 자체적으로 deskshell이라는 포크를 제안합니다.

https://github.com/sihorton/appjs-deskshell/


1
끊어진 링크 인 것 같습니다.
starbeamrainbowlabs

1
이 프로젝트는 더 이상 활성화되지 않습니다. Clayton Gulick이 언급 한 대안에 대해서는 node-webkit을 참조하십시오.
Kukks

Appjs 자체는 deskshell github.com/sihorton/appjs-deskshell
bitfed

11

여기에는 좋은 답변이 많이 있지만 JXcore 만큼 간단하지는 않습니다 .

Windows에 JXcore를 설치했으면 다음을 실행하기 만하면됩니다.

jx package app.js "myAppName" -native

이렇게하면 배포 할 수 있고 외부 종속성없이 실행할 수있는 .exe 파일이 생성됩니다 (시스템에 JXcore 나 Node.js도 필요하지 않음).

해당 기능에 대한 문서는 다음과 같습니다. http://jxcore.com/packaging-code-protection/#cat-74

2018 편집

해당 프로젝트는 현재 죽었지 만 여전히 여기에서 호스팅됩니다 : https://github.com/jxcore/jxcore-release (@Elmue에게 감사드립니다)


1
고마워 친구. Windows에서 Linux를 실행 가능하게 만들 수 있습니까?
Sasivarnan

1
내가 아는 한, 당신은 할 수 없습니다. JXCore는 실행 파일을 만들기 위해 OS에서 일부 파일을 가져 와서 해당 파일을 패키징하지 않는다고 생각합니다. 따라서 Linux를 실행 가능하게 만들려면이 명령을 Linux에서 실행해야합니다.
Nepoxx


1
여기에있는 모든 링크는 죽었습니다. 이것은 작동합니다 : github.com/jxcore/jxcore-release
Elmue

7

시도 disclose: https://github.com/pmq20/disclose

disclose 기본적으로 Node.js 프로젝트 및 Node.js 인터프리터에서 자동 압축 해제 exe를 다음과 같은 특성으로 만듭니다.

  1. GUI가 없습니다. 순수 CLI.
  2. 런타임 종속성 없음
  3. Windows 및 Unix 모두 지원
  4. 처음으로 느리게 실행 (캐시 디렉토리로 추출) 한 다음 영원히 빠름

시도 node-compiler: https://github.com/pmq20/node-compiler

node-compilerNode.js 프로젝트를 단일 실행 파일로 컴파일하기 위해 호출 된 새 프로젝트를 만들었습니다 .

disclose소스 코드가 표준 Node.js 라이브러리처럼 Node.js 인터프리터와 함께 컴파일되기 때문에 처음에는 느리게 실행되지 않는 것보다 낫습니다 .

또한 런타임에 파일 및 디렉터리 요청을 파일 시스템 대신 메모리로 투명하게 리디렉션합니다. 따라서 컴파일 된 제품을 실행하는 데 소스 코드가 필요하지 않습니다.

작동 원리 : https://speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable

유사한 프로젝트와 비교하면

  • pkg ( https://github.com/zeit/pkg ) : Pkg는 패키지 내 파일에 액세스하기 위해 동적으로 fs. * API를 해킹 한 반면 Node.js 컴파일러는 파일을 그대로두고 대신 libsquash를 통해 더 깊은 수준에서 작동합니다. Pkg는 JSON을 사용하여 패키지 내 파일을 저장하는 반면 Node.js 컴파일러는 데이터 구조로 더 정교하고 널리 사용되는 SquashFS를 사용합니다.

  • EncloseJS ( http://enclosejs.com/ ) : EncloseJS는 인 패키지 파일에 대한 액세스를 5 개의 fs. * API로만 제한하는 반면 Node.js 컴파일러는 모든 fs. * API를 지원합니다. EncloseJS는 독점 라이선스이며 Node.js 컴파일러가 MIT 라이선스를 받았으며 사용자가 자유롭게 사용하고 수정할 수있는 동안 사용할 때 비용을 청구합니다.

  • Nexe ( https://github.com/nexe/nexe ) : Nexe는 browserify를 사용하기 때문에 동적 요구를 지원하지 않는 반면 Node.js 컴파일러는 require.resolve를 포함한 모든 종류의 요구를 지원합니다.

  • asar ( https://github.com/electron/asar ) : Asar는 JSON을 사용하여 파일 정보를 저장하고 Node.js 컴파일러는 SquashFS를 사용합니다. Asar는 코드 아카이브와 실행 파일을 별도로 유지하는 반면 Node.js 컴파일러는 모든 JavaScript 소스 코드를 Node.js 가상 머신과 연결하고 단일 실행 파일을 최종 제품으로 생성합니다.

  • AppImage ( http://appimage.org/ ) : AppImage는 SquashFS를 지원하는 커널이있는 Linux 만 지원하는 반면 Node.js 컴파일러는 커널의 특별한 기능 요구 사항없이 Linux, macOS 및 Windows의 세 가지 플랫폼을 모두 지원합니다.


@ StéphaneLaurent 노드 컴파일러를 확인하십시오. exe와 함께 명령 줄 인수 사용을 확실히 지원합니다.
Minqi Pan

2017 년 8 월 30 일 (2 년 전)의 최근 커밋. 단종?!
Thach Lockevn

4

나는 당신에게 BoxedApp을 추천합니다. 매우 잘 작동하는 상용 제품입니다. 모든 NodeJS 앱에서 작동합니다. 최종 사용자는 앱에 대한 EXE 파일을 하나만 받게됩니다. 설치할 필요가 없습니다.

예를 들어 Electron에서 최종 사용자는 앱을 설치 / 압축 해제해야하며 코드의 모든 소스 파일을 볼 수 있습니다.

BoxedApp NodeJS 앱에 필요한 모든 파일과 종속성을 패키징합니다. 압축을 지원하며 컴파일 된 파일은 Windows XP +에서 작동합니다.

사용할 때는 컴파일 된 앱에 Node.EXE를 추가해야합니다. Windows XP를 지원하는 노드 버전을 선택하십시오 (필요한 경우).

이 프로그램은 명령 줄 인수를 지원하므로 패키지 후에 다음을 수행 할 수 있습니다.

c:\myApp argument1

그리고 노드 코드에서 인수를 얻을 수 있습니다.

process.argv[1]

때로는 앱에 파일 종속성이 있으므로 BoxedApp에서 모든 폴더 및 파일을 종속성으로 추가 할 수 있습니다. 예를 들어 설정 파일을 삽입 할 수 있습니다.

var mySettings=require('fs').readFileSync('./settings.jgon').toString()

더 많은 정보:

참고 : 일반적으로 나는 오픈 소스 / 자유 소프트웨어에 대해 추천하고 있지만이 경우에는 작업을 수행 할 수있는 것을 찾지 못했습니다.


1
데이터가 하드 드라이브의 내부 RAM 아니라 저장하기 때문에 그것은 또한 좋은 코드 보호를 지원
z0r1fan

3

이러한 솔루션 중 어느 것이 내 요구 사항을 충족한다는 것을 알았으므로이를 수행하는 node2exe라는 자체 버전의 노드를 만들었습니다. https://github.com/areve/node2exe 에서 사용할 수 있습니다.


3

나는 며칠 동안이 주제를 탐구 해 왔으며 여기에 내가 찾은 것이 있습니다. 옵션은 두 가지 범주로 나뉩니다.

데스크톱 앱을 빌드하려는 경우 가장 좋은 옵션은 다음과 같습니다.

1- NW.js : DOM에서 직접 모든 Node.js 모듈을 호출하고 모든 웹 기술로 애플리케이션을 작성하는 새로운 방법을 가능하게합니다.

2- Electron : JavaScript, HTML 및 CSS로 크로스 플랫폼 데스크톱 앱 빌드

다음은 그들 사이의 좋은 비교입니다 : NW.js & Electron Compared . NW.js가 더 낫다고 생각하며 JS 파일을 컴파일하는 응용 프로그램도 제공합니다. Enigma Virtual Box 와 같은 독립 실행 형 실행 파일 및 설치 프로그램 빌더도 있습니다. 둘 다 서버 앱에 필요하지 않은 Chrome의 임베디드 버전을 포함합니다.

서버 앱을 패키징하려는 경우 다음이 가장 좋은 옵션입니다.

노드 컴파일러 : Node.js 용으로 설계된 AOT (Ahead-of-time) 컴파일러로 작동합니다.

Nexe : node.js 앱에서 단일 실행 파일 만들기

이 카테고리에서는 동적 요구 사항과 네이티브 노드 모듈을 지원하는 노드 컴파일러가 더 좋다고 생각합니다. 사용하기 매우 쉽고 출력은 25MB부터 시작됩니다. Node Compiler 페이지에서 다른 솔루션과의 전체 비교를 읽을 수 있습니다. Nexe에 대해 많이 읽지 않았지만 지금은 Node Compiler가 V8 스냅 샷 기능을 사용하여 js 파일을 바이너리 형식으로 컴파일하지 않는 것 같지만 버전 2를 계획하고 있습니다. 또한 내장 설치 프로그램 빌더가있을 예정입니다.


2
ElectronOP의 문제에 대한 유효한 제안이 될 수 없습니다. 완전히 다른 노드 프레임 워크입니다.
progyammer

대단한 비교!
Vlad


1

명령 프롬프트에서 승리를 시작하는 데 지쳐서 이것도 만났습니다. 약간 개선 된 ver. 무엇 보다 josh3736 . 이것은 XML 파일을 사용하여 몇 가지 설정을 가져옵니다. 예를 들어 Node.exe기본 app.js에서 시작할 파일과 경로가 있습니다. 또한로드 할 환경 (프로덕션, 개발 등)을 app.js (또는 server.js 또는 호출 한 모든 항목)에 지정했습니다. 기본적 NODE_ENV={0}으로 {0}는 app.js의 구성 이름을 var로 추가합니다. config.xml에서 "mode"요소를 수정하여이를 수행합니다. 단계를 저장하기 위해 여기 ==> 디렉토리 에서 프로젝트를 가져올 수 있습니다 . 그렇지 않으면 이것을 편집하지 않으면 빌드가 경고를 던질 것입니다. github . Post Build 이벤트에서 복사 경로를 수정하여 config.xml 및 실행 파일을 자동으로 복사 할 수 있습니다.Nodejs

var startInfo = new ProcessStartInfo();
        startInfo.FileName = nodepath;
        startInfo.Arguments = apppath;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        if(env.Length > 0)
            startInfo.EnvironmentVariables.Add("NODE_ENV", env);

        try
        {
            using (Process p = Process.Start(startInfo))
            {
                p.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), "Start Error", MessageBoxButtons.OK);
        }


0

nodebob 이라는 오픈 소스 빌드 도구 프로젝트가 있습니다 . 나는 작동하는 플랫폼 창,

  1. 단순히 프로젝트 복제 또는 다운로드
  2. 모든 node-webkit 프로젝트 파일을 앱 폴더에 복사하십시오.
  3. build.bat 스크립트를 실행하십시오.

릴리스 폴더에서 실행 파일을 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.