วิธีสร้างไฟล์ exe จากแอพ node.js


123

ฉันมีแอปโหนดที่ฉันเขียนซึ่งฉันเรียกใช้ดังนี้:

node.exe app.js inputArg

มีวิธีใดบ้างที่ฉันสามารถทำแพ็คเกจนี้เป็น. exe ได้ด้วยตัวเอง แล้วฉันจะทำอะไรแบบนี้ได้ไหม?

App.exe inputArg

ฉันมีวิธีแกล้งโดยใช้ไฟล์แบตช์ดังนั้นฉันจึงสามารถทำได้:

App.bat inputArg

แต่สิ่งนี้ต้องการให้ฉันมีการอ้างอิงและโหนดทั้งหมดในโฟลเดอร์นั้นซึ่งไม่เหมาะ


1
การหลอกลวงที่เป็นไปได้: stackoverflow.com/questions/6145561/…
Mike Christensen


รายการเครื่องมือดีๆอยู่ที่นี่: stackoverflow.com/a/12486874/32679
GrGr

1
ฉันคิดว่าใครก็ตามที่เพิ่มคำตอบที่นี่จำเป็นต้องพิจารณาว่าได้ดำเนินการไปแล้วหรือไม่ คำถามนี้กลายเป็นการเชื่อมโยงไปยังผลิตภัณฑ์โอเพ่นซอร์สต่างๆที่มีคุณภาพ / กิจกรรมที่แตกต่างกัน
Liam

คำตอบ:


35

มีทางเลือกสองสามทางทั้งฟรีและเชิงพาณิชย์ ฉันไม่ได้ใช้มันเลย แต่ในทางทฤษฎีควรใช้งานได้:

ส่วนใหญ่จะกำหนดให้คุณเก็บไฟล์แบตช์ไว้เป็นไฟล์ปฏิบัติการหลักจากนั้นมัด node.exe และสคริปต์ของคุณ

ขึ้นอยู่กับสคริปต์ของคุณคุณยังมีตัวเลือกในการพอร์ตไปยังJSDBซึ่งสนับสนุนวิธีง่ายๆในการสร้างไฟล์ปฏิบัติการโดยเพียงแค่ผนวกทรัพยากรเข้ากับมัน

วิธีแก้ปัญหาที่สามคือการเก็บโหนดไว้ที่ใดที่หนึ่งเช่นC:\utilsและเพิ่มโฟลเดอร์นี้ในPATHตัวแปรสภาพแวดล้อมของคุณ จากนั้นคุณสามารถสร้างไฟล์. bat ใน dir ที่รันโหนด + สคริปต์ที่คุณต้องการ - ฉันได้รับ Coffeescript coffeeทำงานบน windows ด้วยวิธีนี้ การตั้งค่านี้สามารถดำเนินการโดยอัตโนมัติด้วยไฟล์แบตช์สคริปต์ vb หรือตัวติดตั้ง


เหล่านี้ดูดีและดูเหมือนว่าพวกเขาสามารถทำในสิ่งที่ฉันต้องการได้ ฉันจะให้มันยิงและติดต่อกลับไปหาคุณ
Aishwar

2
ฉันลองใช้ตัวแปลง Batch To EXE แบบ "ขั้นสูง" และมันใช้งานได้ดี คุณสามารถรวมการอ้างอิงลงในไฟล์ EXE ขอบคุณสำหรับความช่วยเหลือ
Aishwar

1
@Aishwar แต่คุณไม่สามารถรวมโฟลเดอร์ node_modules ได้ดังนั้นคุณจึงไม่สามารถทำอะไรขั้นสูงในนั้นได้ ...
Clint

จะเกิดอะไรขึ้นถ้าคุณ zip / rar node_modules และแยกไปยังไดเร็กทอรี temp เมื่อแอปพลิเคชันทำงาน อาจจะช้าไปหน่อยหากคุณมีโมดูลจำนวนมาก
Jarrod Mosen

55

วิธีการแก้ปัญหาที่ผมเคยใช้เป็นโรเจอร์วังโหนด WebKit

นี่เป็นวิธีที่ยอดเยี่ยมในการจัดแพ็กเกจแอป nodejs และแจกจ่ายแอปพลิเคชันเหล่านี้และยังช่วยให้คุณมีตัวเลือกในการ "รวม" แอปทั้งหมดเป็นโปรแกรมปฏิบัติการเดียว รองรับ windows, mac และ linux

นี่คือเอกสารบางส่วนเกี่ยวกับตัวเลือกต่างๆสำหรับการปรับใช้แอป node-webkit แต่โดยสรุปคุณต้องดำเนินการดังต่อไปนี้:

  1. บีบอัดไฟล์ทั้งหมดของคุณด้วย package.json ในรูท
  2. เปลี่ยนนามสกุลจาก. zip เป็น. nw
  3. คัดลอก / b nw.exe + app.nw app.exe

เช่นเดียวกับหมายเหตุเพิ่มเติม - ฉันได้จัดส่งแอปพลิเคชั่นซีดีสำหรับการผลิต / ติดตั้งหลายกล่องโดยใช้สิ่งนี้และใช้งานได้ดี แอปเดียวกันทำงานบน windows, mac, linux และบนเว็บ

อัปเดต: ชื่อโครงการเปลี่ยนเป็น "nw.js" และตั้งอยู่ที่นี่อย่างถูกต้อง: nw.js


1
เพิ่งลองใช้งานได้ดีมาก! และได้รับการสนับสนุนจากผู้คนที่ Intel
Timo Huovinen

นี่ควรเป็นคำตอบที่ถูกต้องและเป็นปัจจุบันที่สุด ณ วันนี้ ดูCheatsheetของ node webkit ที่นี่: gist.github.com/LeCoupa/80eca2716a2b13c37cce รวมถึงสิ่งที่มีประโยชน์อย่างยิ่งอื่น ๆ เช่นวิธีการรวบรวม JS (หรืออย่างน้อยก็บีบลงเป็นไบต์โค้ดขึ้นอยู่กับว่าสมัยเก่าที่คุณต้องการเกี่ยวกับคำนั้น "รวบรวม").
Erik Reppen

ฉันชอบคำตอบนี้ แต่ก็ยังไม่สร้าง exe แบบสแตนด์อโลน ตามข้อมูลของIntelและnw.js ที่ Githubคุณยังต้องมีไฟล์อื่นอย่างน้อยสองไฟล์ในโฟลเดอร์เดียวกัน: nw.pak และ icudt.dll คุณสร้าง exe แบบสแตนด์อโลนได้อย่างไร?
Jeff Baker

@JeffBaker ถ้าคุณมองลงไปในเอกสารบน github คุณจะเห็นสิ่งนี้: github.com/nwjs/nw.js/wiki/…ซึ่งคุณสามารถทำได้หากไม่ต้องการรวมไฟล์เพิ่มเติม
Clayton Gulick

@Clayton, Nw.js จัดทำโดย chrome.com เช่นกัน developer.chrome.com/apps/migration#native
Pacerier

29

สำหรับใครก็ตามที่สะดุดกับคำถามนี้ตอนนี้มีสองโปรเจ็กต์ที่สร้าง exes จากโปรเจ็กต์โหนดของคุณคือPkgและElectron.atom.ioซึ่งแตกต่างกันเล็กน้อย:

  1. Pkgจะคอมไพล์โปรเจ็กต์ของคุณเป็นโค้ดเนทีฟรวมถึงเนื้อหาและการติดตั้ง nodejs ด้วย (ระบบไม่จำเป็นต้องติดตั้ง nodejs เพื่อรัน. exe) จะไม่รวมซอร์สโค้ดของคุณ ผลลัพธ์ที่ได้คือ Windows เท่านั้น (.exe) รองรับทุกแพลตฟอร์มแล้ว ตอนนี้ต้องมีใบอนุญาตสำหรับผลิตภัณฑ์เชิงพาณิชย์ โอเพ่นซอร์สอย่างเต็มที่
  2. Electron.atom.ioในขณะที่มันจะไม่ได้มีขนาดกะทัดรัดและสร้าง .exe สำหรับคุณก็สามารถนำมาใช้ในการกระจาย nodejs ปพลิเคชันตั้งแต่พวกเขามีวิธีการแจกจ่ายโปรแกรม ข้อดีคืออิเล็กตรอนเป็นแบบหลายแพลตฟอร์ม (windows, mac osx, linux) ข้อเสียคือซอร์สโค้ดของคุณจะรวมเข้าด้วยกันแม้จะยากก็ตามพวกเขาเสนอวิธีการเผยแพร่แอปของคุณภายในไฟล์asar archive มันจะไม่กันกระสุน แต่ก็ยังดีกว่าแหล่งที่มาของคุณแบบธรรมดา

2
โปรดอัปเดต: EncloseJS DOES รองรับ Linux และ OS X ในขณะนี้
000000000000000000000

ความคิดเห็นที่ถูกแก้ไข! @ 000000000000000000000
sokie

EncloseJS คือหนทางที่จะไป ฉันจะลองตอนนี้! ขอบคุณสำหรับคำตอบของคุณ! +1 :)
tftd

ฉันไม่สามารถติดตั้ง EncloseJS มันขึ้นว่า Err code ELIFECYCLE โดยไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์
Elmue

2
EncloseJS ไม่ได้รับการบำรุงรักษาอีกต่อไป ทายาทดูเหมือนจะ zeit / pkg ( npmjs.com/package/pkg )
Lucas Gonze

21

ตามค่าเริ่มต้น Windows จะเชื่อมโยง.jsไฟล์กับWindows Script Hostซึ่งเป็นเอ็นจินรันไทม์ JS แบบสแตนด์อโลนของ Microsoft ถ้าคุณพิมพ์script.jsที่พร้อมรับคำสั่ง (หรือคลิกสองครั้งที่.jsแฟ้มใน Explorer) wscript.exeสคริปต์จะถูกดำเนินการโดย

นี่อาจกำลังแก้ปัญหาในเครื่องด้วยการตั้งค่าส่วนกลางแต่คุณสามารถเชื่อมโยง .jsไฟล์node.exeแทนได้ดังนั้นการพิมพ์script.jsที่พรอมต์คำสั่งหรือการดับเบิลคลิก / ลากรายการไปยังสคริปต์จะเปิดใช้งานด้วย Node

แน่นอนว่าถ้าคุณเชื่อมโยง.jsไฟล์กับโปรแกรมแก้ไขเพื่อให้ดับเบิลคลิกที่ไฟล์เหล่านั้นเพื่อเปิดโปรแกรมแก้ไขข้อความที่คุณชื่นชอบคำแนะนำนี้จะไม่ได้ผลดีนัก คุณยังสามารถเพิ่มรายการเมนูคลิกขวาของ "Execute with Node" ลงใน.jsไฟล์ได้แม้ว่าทางเลือกนี้จะไม่สามารถตอบสนองความต้องการบรรทัดคำสั่งของคุณได้


วิธีแก้ปัญหาที่ง่ายที่สุดคือใช้แบตช์ไฟล์ - คุณไม่จำเป็นต้องมีสำเนาของ Node ในโฟลเดอร์ที่สคริปต์ของคุณอยู่เพียงแค่อ้างอิง Node ที่ปฏิบัติการได้อย่างแน่นอน:

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

อีกทางเลือกหนึ่งคือแอป C # ที่เรียบง่ายซึ่งจะเริ่มต้นโหนดโดยใช้ชื่อไฟล์ + ของตัวเอง.jsเป็นสคริปต์ในการเรียกใช้และส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งใด ๆ

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 ... "app.js" arg1 ...โปรดทราบว่าแอป C # bootstrapper จะออกทันทีโดยปล่อยให้ Node รับผิดชอบหน้าต่างคอนโซล

เนื่องจากสิ่งนี้น่าจะเป็นที่สนใจค่อนข้างกว้างฉันจึงดำเนินการต่อและทำให้สิ่งนี้พร้อมใช้งานบน GitHubรวมถึงexe ที่รวบรวมไว้หากการขึ้นรถตู้กับคนแปลกหน้าเป็นสิ่งที่คุณต้องการ


ดังที่คุณกล่าวมานี่ไม่ได้ช่วยแก้ปัญหาของฉันในทางที่ดี แต่ +1 สำหรับการอ่านที่น่าสนใจ
Aishwar

@Aishwar ฉันได้เพิ่มแอพง่ายๆที่จะเปิด Node ให้คุณ ดูการแก้ไข
josh3736

@ josh3736 exe ของคุณยังต้องการให้คุณมี node.exe ในโฟลเดอร์เดียวกันหรือไม่?
Ricardo Tomasi

@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 บนดิสก์ทำให้เกิดไฟล์ Exe ขนาดเล็ก 18MB ซึ่งเห็นได้ชัดว่าใช้งานไม่ได้เลย
Elmue


12

เนื่องจากคำถามนี้ได้รับคำตอบจึงมีการเปิดตัวโซลูชันอื่น

https://github.com/appjs/appjs

ในขณะที่เขียนนี้นี่เป็นโซลูชันสุดท้ายทั้งหมดสำหรับแอปบรรจุภัณฑ์ node.js ผ่านแพ็คเกจโครเมียมที่แยกออกมาซึ่งรวบรวมไว้ในไฟล์ปฏิบัติการ

แก้ไข: AppJS ไม่ทำงานอีกต่อไป แต่แนะนำทางแยกที่เรียกว่า deskshell

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


1
ดูเหมือนจะเป็นลิงค์เสีย
starbeamrainbowlabs

1
โครงการนี้ไม่มีการใช้งานแล้ว โปรดดู node-webkit สำหรับทางเลือกอื่นตามที่ Clayton Gulick กล่าวไว้
Kukks

Appjs เองแนะนำทางแยกที่เรียกว่า deskshell github.com/sihorton/appjs-deskshell
bitfed

11

มีจำนวนมากของคำตอบที่ดีอยู่ที่นี่ แต่พวกเขาไม่ได้ทั้งหมดเป็นตรงไปตรงมาJXcore

เมื่อคุณติดตั้ง JXcore บน windows แล้วสิ่งที่คุณต้องทำคือเรียกใช้:

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 ได้หรือไม่?
ศศิวรรณ

1
เท่าที่ฉันรู้ไม่มีคุณทำไม่ได้ ฉันคิดว่า JXCore คว้าบางไฟล์จากระบบปฏิบัติการเพื่อสร้างไฟล์ปฏิบัติการและมันไม่ได้รวมไฟล์เหล่านั้นไว้ดังนั้นหากคุณต้องการสร้างไฟล์ปฏิบัติการ Linux คุณจะต้องรันคำสั่งนี้บน Linux
Nepoxx

2

1
ลิงค์ทั้งหมดนี่ตายแล้ว ใช้งานได้: github.com/jxcore/jxcore-release
Elmue

7

ลองdisclose: https://github.com/pmq20/disclose

disclose โดยพื้นฐานแล้วจะทำให้ exe แยกตัวเองออกจากโปรเจ็กต์ Node.js และตัวแปล Node.js โดยมีคุณสมบัติดังต่อไปนี้

  1. ไม่มี GUI CLI บริสุทธิ์
  2. ไม่มีการอ้างอิงเวลาทำงาน
  3. รองรับทั้ง Windows และ Unix
  4. ทำงานช้าเป็นครั้งแรก (แตกไฟล์ไปยังแคช dir) จากนั้นเร็วตลอดไป

ลองnode-compiler: https://github.com/pmq20/node-compiler

ฉันได้สร้างโปรเจ็กต์ใหม่ที่เรียกว่าnode-compilerเพื่อรวบรวมโปรเจ็กต์ Node.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 Compiler ใช้ SquashFS ที่ซับซ้อนและใช้กันอย่างแพร่หลายเป็นโครงสร้างข้อมูล

  • EncloseJS ( http://enclosejs.com/ ): EncloseJS จำกัด การเข้าถึงไฟล์ในแพ็กเกจเพียงห้า fs. * API ในขณะที่ Node.js Compiler รองรับ fs ทั้งหมด * API EncloseJS เป็นลิขสิทธิ์เฉพาะและจะเรียกเก็บเงินเมื่อใช้งานในขณะที่ Node.js Compiler ได้รับอนุญาตจาก MIT และผู้ใช้ทั้งสองสามารถใช้งานได้ฟรีและแก้ไขได้ฟรี

  • Nexe ( https://github.com/nexe/nexe ): Nexe ไม่รองรับความต้องการแบบไดนามิกเนื่องจากการใช้ browserify ในขณะที่ Node.js Compiler รองรับความต้องการทุกประเภทรวมถึง require.resolve

  • asar ( https://github.com/electron/asar ): Asar ใช้ JSON เพื่อจัดเก็บข้อมูลของไฟล์ในขณะที่ Node.js Compiler ใช้ SquashFS Asar เก็บรหัสที่เก็บถาวรและไฟล์ปฏิบัติการแยกจากกันในขณะที่ Node.js Compiler เชื่อมโยงซอร์สโค้ด JavaScript ทั้งหมดเข้ากับเครื่องเสมือน Node.js และสร้างไฟล์ปฏิบัติการเดียวเป็นผลิตภัณฑ์ขั้นสุดท้าย

  • AppImage ( http://appimage.org/ ): AppImage รองรับเฉพาะ Linux ที่มีเคอร์เนลที่รองรับ SquashFS ในขณะที่ Node.js Compiler รองรับทั้งสามแพลตฟอร์มของ Linux, macOS และ Windows ในขณะที่ไม่มีข้อกำหนดคุณสมบัติพิเศษใด ๆ จากเคอร์เนล


@ StéphaneLaurentตรวจสอบโหนดคอมไพเลอร์แน่นอนว่ารองรับการใช้อาร์กิวเมนต์บรรทัดคำสั่งกับ exe
Minqi Pan

ล่าสุดกระทำเมื่อ 30 ส.ค. 2017 (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 : ให้คุณเรียกโมดูล Node.js ทั้งหมดโดยตรงจาก DOM และเปิดใช้งานวิธีใหม่ในการเขียนแอปพลิเคชันด้วยเทคโนโลยีเว็บทั้งหมด

2- อิเล็กตรอน : สร้างแอปเดสก์ท็อปข้ามแพลตฟอร์มด้วย JavaScript, HTML และ CSS

นี่คือการเปรียบเทียบที่ดีระหว่างพวกเขาNW.js และอิเลคตรอนเมื่อเทียบ ฉันคิดว่า NW.js ดีกว่าและยังมีแอพพลิเคชั่นสำหรับคอมไพล์ไฟล์ JS นอกจากนี้ยังมีบางแบบสแตนด์อโลนปฏิบัติการและติดตั้งสร้างเช่นEnigma เสมือนกล่อง ทั้งสองมี Chrome เวอร์ชันฝังตัวซึ่งไม่จำเป็นสำหรับแอปเซิร์ฟเวอร์

หากคุณต้องการจัดแพ็กเกจแอปเซิร์ฟเวอร์นี่คือตัวเลือกที่ดีที่สุด:

โหนดคอมไพเลอร์ : คอมไพเลอร์ล่วงหน้า (AOT) ที่ออกแบบมาสำหรับ Node.js ซึ่งใช้งานได้จริง

Nexe : สร้างแอป node.js ที่เรียกใช้งานได้เพียงชุดเดียว

ในหมวดหมู่นี้ฉันเชื่อว่าคอมไพเลอร์โหนดดีกว่าซึ่งรองรับไดนามิกที่ต้องการและโมดูลโหนดเนทีฟ ใช้งานง่ายมากและเอาต์พุตเริ่มต้นที่ 25MB คุณสามารถอ่านการเปรียบเทียบแบบเต็มกับโซลูชันอื่น ๆ ในหน้า Node Compiler ฉันไม่ได้อ่านเกี่ยวกับ Nexe มากนัก แต่สำหรับตอนนี้ดูเหมือนว่า Node Compiler จะไม่ได้รวบรวมไฟล์ js เป็นรูปแบบไบนารีโดยใช้คุณสมบัติสแน็ปช็อต V8 แต่มีการวางแผนไว้สำหรับเวอร์ชัน 2 นอกจากนี้ยังมีตัวสร้างตัวติดตั้งในตัวด้วย


2
Electronไม่ถือว่าเป็นข้อเสนอแนะที่ถูกต้องสำหรับปัญหาของ OP มันเป็น Node framework ที่แตกต่างกันทั้งหมด
progyammer

เทียบชั้นเยี่ยม!
Vlad


1

เบื่อที่จะเริ่มชนะจากพรอมต์คำสั่งแล้วฉันก็วิ่งข้ามสิ่งนี้เช่นกัน เวอร์ชั่นปรับปรุงเล็กน้อย มากกว่าสิ่งที่josh3736 สิ่งนี้ใช้ไฟล์ XML เพื่อดึงการตั้งค่าบางอย่าง ตัวอย่างเช่นเส้นทางไปยังNode.exeไฟล์ที่จะเริ่มต้นใน app js เริ่มต้น รวมถึงสภาพแวดล้อมในการโหลด (การผลิต, การพัฒนา ฯลฯ ) ที่คุณระบุไว้ใน app.js ของคุณ (หรือ server.js หรืออะไรก็ตามที่คุณเรียกมัน) โดยพื้นฐานแล้วจะเพิ่มโดยNODE_ENV={0}ที่ {0} เป็นชื่อการกำหนดค่าของคุณใน app.js เป็นตัวแปรสำหรับคุณ คุณทำได้โดยการแก้ไของค์ประกอบ "โหมด" ใน config.xml คุณสามารถคว้าโครงการที่นี่ ==> 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);
        }

1

อาจจะมีตัวเลือกอื่น ๆ อีกมากมาย แต่ความรู้ของฉันมีหนึ่งโครงการในการพัฒนางานบน GitHub https://github.com/zeit/pkg คุณสามารถเล่นกับมัน อีกหนึ่งรายการที่https://github.com/nexe/nexeแต่ไม่ได้อยู่ระหว่างการพัฒนา


0

มีโครงการ opensource สร้างเครื่องมือที่เรียกว่าเป็นnodebob ฉันคิดว่าหน้าต่างแพลตฟอร์มที่ใช้งานได้

  1. เพียงแค่โคลนหรือดาวน์โหลดโครงการ
  2. คัดลอกไฟล์โปรเจ็กต์ node-webkit ทั้งหมดของคุณลงในโฟลเดอร์แอพ
  3. รันสคริปต์ build.bat

คุณจะพบไฟล์ปฏิบัติการในโฟลเดอร์รีลีส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.