내가 작성한 노드 앱이 있으며 다음과 같이 실행됩니다.
node.exe app.js inputArg
이것을 .exe로 패키징 할 수있는 방법이 있습니까? 그래서 그냥 이렇게 할 수 있나요?
App.exe inputArg
배치 파일을 사용하여이를 속일 수있는 방법이 있으므로 다음과 같이 할 수 있습니다.
App.bat inputArg
그러나이를 위해서는 해당 폴더에 모든 종속성과 노드가 있어야하며 이는 이상적이지 않습니다.
내가 작성한 노드 앱이 있으며 다음과 같이 실행됩니다.
node.exe app.js inputArg
이것을 .exe로 패키징 할 수있는 방법이 있습니까? 그래서 그냥 이렇게 할 수 있나요?
App.exe inputArg
배치 파일을 사용하여이를 속일 수있는 방법이 있으므로 다음과 같이 할 수 있습니다.
App.bat inputArg
그러나이를 위해서는 해당 폴더에 모든 종속성과 노드가 있어야하며 이는 이상적이지 않습니다.
답변:
무료 및 상업적인 몇 가지 대안이 있습니다. 나는 그들 중 어느 것도 사용하지 않았지만 이론적으로는 작동해야합니다.
대부분의 경우 배치 파일을 기본 실행 파일로 유지 한 다음 node.exe와 스크립트를 번들링해야합니다.
스크립트에 따라 실행 파일을 생성 하는 쉬운 방법을 지원하는 JSDB 로 이식하는 옵션도 있습니다. 리소스를 추가 .
세 번째 준 해결책은 노드를 같은 곳에 유지 C:\utils
하고이 폴더를 PATH
환경 변수에 추가하는 것 입니다. 그런 다음 노드 + 선호하는 스크립트를 실행하는 해당 디렉토리에 .bat 파일을 만들 수 있습니다 coffee
.이 방법으로 coffeescript가 Windows에서 작동합니다. 이 설정은 배치 파일, vb 스크립트 또는 설치 프로그램을 사용하여 자동화 할 수 있습니다.
제가 사용한 솔루션은 Roger Wang의 node-webkit입니다. 입니다.
이는 nodejs 앱을 패키징하고 배포하는 환상적인 방법이며 전체 앱을 단일 실행 파일로 "번들"하는 옵션도 제공합니다. Windows, Mac 및 Linux를 지원합니다.
다음 은 node-webkit 앱을 배포하기위한 다양한 옵션에 대한 몇 가지 문서이지만 간단히 말해서 다음을 수행합니다.
추가 된 메모처럼-나는 이것을 사용하여 여러 생산 상자 / 설치 CD 응용 프로그램을 출하했으며 훌륭하게 작동했습니다. 동일한 앱이 Windows, Mac, Linux 및 웹에서 실행됩니다.
업데이트 : 프로젝트 이름이 'nw.js'로 변경되었으며 여기에 올바르게 위치합니다 : nw.js
이 질문에 걸림돌이되는 사람에게는 이제 노드 프로젝트에서 exe를 생성하는 두 개의 프로젝트 인 Pkg 및 Electron.atom.io가 있지만 약간 다릅니다.
기본적으로 Windows는 .js
파일을 Microsoft의 독립 실행 형 JS 런타임 엔진 인 Windows Script Host 와 연결 합니다 . 명령 프롬프트에서 script.js 를 입력 하거나 .js
탐색기 에서 파일을 두 번 클릭 하면 스크립트가 wscript.exe
.
이것은 전역 설정으로 로컬 문제를 해결할 수 있지만 대신 파일을 연결 하여 script.js 를 입력 할 수 있습니다..js
node.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 에서 사용할 수 있도록했습니다 .
내가 아는 최고의 도구는 NodeJS 도구입니다. zeit / pkg
사용하기가 매우 쉽고 (예를 들어 Nexe보다 훨씬 더 많음) 전역 적으로 설치할 수 있습니다.
npm install -g pkg
macOS, Linux 및 Windows 용 실행 파일을 만들려면 :
pkg exampleApp.js
나는 NodeJS 소켓 서버를 사용하는 약간의 복잡한 코드를 가지고 있었고 다른 응용 프로그램을 시도했지만 zeit / pkg를 제외하고는 제대로 만들지 못했습니다 .
시도하지 않았지만 nexe는 nexe가 이것을 할 수있는 것처럼 보입니다.
이 질문에 대한 답변을받은 이후 다른 솔루션이 출시되었습니다.
https://github.com/appjs/appjs
이 글을 쓰는 시점에서 이것은 실행 파일로 컴파일 된 제거 된 크롬 패키지를 통해 node.js 앱을 패키징하는 최종 솔루션입니다.
편집 : AppJS는 더 이상 활성화되지 않지만 자체적으로 deskshell이라는 포크를 제안합니다.
여기에는 좋은 답변이 많이 있지만 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에게 감사드립니다)
시도 disclose
: https://github.com/pmq20/disclose
disclose
기본적으로 Node.js 프로젝트 및 Node.js 인터프리터에서 자동 압축 해제 exe를 다음과 같은 특성으로 만듭니다.
시도 node-compiler
: https://github.com/pmq20/node-compiler
node-compiler
Node.js 프로젝트를 단일 실행 파일로 컴파일하기 위해 호출 된 새 프로젝트를 만들었습니다 .
disclose
소스 코드가 표준 Node.js 라이브러리처럼 Node.js 인터프리터와 함께 컴파일되기 때문에 처음에는 느리게 실행되지 않는 것보다 낫습니다 .
또한 런타임에 파일 및 디렉터리 요청을 파일 시스템 대신 메모리로 투명하게 리디렉션합니다. 따라서 컴파일 된 제품을 실행하는 데 소스 코드가 필요하지 않습니다.
유사한 프로젝트와 비교하면
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의 세 가지 플랫폼을 모두 지원합니다.
나는 당신에게 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()
더 많은 정보:
참고 : 일반적으로 나는 오픈 소스 / 자유 소프트웨어에 대해 추천하고 있지만이 경우에는 작업을 수행 할 수있는 것을 찾지 못했습니다.
이러한 솔루션 중 어느 것이 내 요구 사항을 충족한다는 것을 알았으므로이를 수행하는 node2exe라는 자체 버전의 노드를 만들었습니다. https://github.com/areve/node2exe 에서 사용할 수 있습니다.
나는 며칠 동안이 주제를 탐구 해 왔으며 여기에 내가 찾은 것이 있습니다. 옵션은 두 가지 범주로 나뉩니다.
데스크톱 앱을 빌드하려는 경우 가장 좋은 옵션은 다음과 같습니다.
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를 계획하고 있습니다. 또한 내장 설치 프로그램 빌더가있을 예정입니다.
Electron
OP의 문제에 대한 유효한 제안이 될 수 없습니다. 완전히 다른 노드 프레임 워크입니다.
node.js 앱에서 단일 실행 파일을 생성하는 nexe를 사용해보십시오
명령 프롬프트에서 승리를 시작하는 데 지쳐서 이것도 만났습니다. 약간 개선 된 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);
}
다른 많은 옵션이있을 수 있지만 제가 아는 한 GitHub https://github.com/zeit/pkg 에서 현재 개발중인 프로젝트가 하나 있습니다 . 그것을 가지고 놀 수 있습니다. https://github.com/nexe/nexe 에서 하나 더 있지만 현재 개발 중이 아닙니다.