Mam napisaną przeze mnie aplikację node, którą uruchamiam w następujący sposób:
node.exe app.js inputArg
Czy jest jakiś sposób, żebym mógł sam spakować to do pliku .exe? Więc mogę po prostu zrobić coś takiego?
App.exe inputArg
Mam jakiś sposób na sfałszowanie tego za pomocą pliku wsadowego, więc mogę to zrobić:
App.bat inputArg
Ale to wymaga, żebym miał wszystkie zależności i węzeł w tym folderze, co nie jest idealne.
javascript
windows
node.js
exe
Aishwar
źródło
źródło
Odpowiedzi:
Jest kilka alternatyw, zarówno bezpłatnych, jak i komercyjnych. Nie używałem żadnego z nich, ale teoretycznie powinny działać:
Większość będzie wymagała zachowania pliku wsadowego jako głównego pliku wykonywalnego, a następnie dołączenia node.exe i skryptów.
W zależności od skryptu masz również możliwość przeniesienia go do JSDB , która obsługuje łatwy sposób tworzenia plików wykonywalnych poprzez proste dołączanie do niego zasobów.
Trzecim quasi-rozwiązaniem jest trzymanie węzła w jakimś miejscu
C:\utils
i dodanie tego folderu doPATH
zmiennej środowiskowej. Następnie możesz utworzyć pliki .bat w tym katalogu, które uruchamiają node + preferowane skrypty -coffee
w ten sposób mam coffeescript działa w systemie Windows. Tę konfigurację można zautomatyzować za pomocą pliku wsadowego, skryptu VB lub instalatora.źródło
Rozwiązaniem, którego użyłem, jest node-webkit Rogera Wanga .
Jest to fantastyczny sposób na pakowanie aplikacji nodejs i ich dystrybucję, a nawet daje możliwość "spakowania" całej aplikacji jako pojedynczego pliku wykonywalnego. Obsługuje Windows, Mac i Linux.
Oto kilka dokumentów na temat różnych opcji wdrażania aplikacji node-webkit, ale w skrócie, wykonaj następujące czynności:
Jako dodatkowa uwaga - wysłałem kilka aplikacji produkcyjnych / instalacyjnych CD, używając tego i działa świetnie. Ta sama aplikacja działa w systemie Windows, Mac, Linux i w Internecie.
Aktualizacja: nazwa projektu została zmieniona na „nw.js” i jest poprawnie umieszczona tutaj: nw.js
źródło
Dla każdego, kto natknie się na to pytanie, są teraz dwa projekty, które tworzą exe z projektów węzłów, Pkg i Electron.atom.io , różnią się one nieznacznie:
Wynikowy plik wykonywalny to TYLKO Windows (.exe).Wszystkie platformy są teraz obsługiwane.Teraz wymaga licencji na produkty komercyjne.W pełni otwarte oprogramowanie.źródło
Domyślnie system Windows kojarzy
.js
pliki z hostem skryptów systemu Windows , samodzielnym aparatem wykonawczym JS firmy Microsoft. Jeśli wpiszesz skrypt.js w wierszu polecenia (lub dwukrotnie klikniesz.js
plik w Eksploratorze), skrypt zostanie wykonany przezwscript.exe
.Może to być rozwiązanie lokalnego problemu z ustawieniem globalnym , ale zamiast tego można skojarzyć
.js
pliki znode.exe
, tak aby wpisanie script.js w wierszu poleceń lub dwukrotne kliknięcie / przeciągnięcie elementów do skryptów uruchomiło je w Node.Oczywiście, jeśli - tak jak ja - skojarzyłeś
.js
pliki z edytorem, aby ich dwukrotne kliknięcie otworzyło Twój ulubiony edytor tekstu, ta sugestia nie przyniesie wiele dobrego. Możesz także dodać do.js
plików pozycję „Wykonaj z węzłem” w menu prawym przyciskiem myszy , chociaż ta alternatywa nie zaspokaja Twoich potrzeb w wierszu poleceń.Najprostszym rozwiązaniem jest prawdopodobnie użycie pliku wsadowego - nie musisz mieć kopii Node w folderze, w którym znajduje się twój skrypt. Po prostu odwołaj się do pliku wykonywalnego Node absolutnie:
Inną alternatywą jest ta bardzo prosta aplikacja C #, która uruchomi Node przy użyciu własnej nazwy pliku +
.js
jako skryptu do uruchomienia i przekaże wszystkie argumenty wiersza poleceń.Jeśli więc nazwiesz wynikowy plik EXE „app.exe”, możesz wpisać,
app arg1 ...
a Node zostanie uruchomiony z wiersza poleceń"app.js" arg1 ...
. Zauważ, że aplikacja bootstrapper C # zostanie natychmiast zamknięta, pozostawiając Node za okno konsoli.Ponieważ jest to prawdopodobnie stosunkowo szerokie zainteresowanie, poszedłem dalej i udostępniłem to na GitHub , w tym skompilowany plik exe, jeśli wsiadanie do samochodów dostawczych z nieznajomymi jest twoją sprawą.
źródło
Najlepszym narzędziem, jakie znam, jest narzędzie NodeJS: zeit / pkg
Jest bardzo łatwy w użyciu (znacznie więcej niż Nexe, na przykład), możesz po prostu zainstalować go globalnie:
npm install -g pkg
do tworzenia plików wykonywalnych dla macOS, Linux i Windows:
pkg exampleApp.js
Miałem trochę skomplikowanego kodu, który korzystał z serwera gniazd NodeJS, próbowałem różnych aplikacji, żadna z nich nie stworzyła go poprawnie, z wyjątkiem zeit / pkg .
źródło
Nie próbowałem tego, ale nexe wygląda na to, że nexe może to zrobić:
https://github.com/crcn/nexe
źródło
Odkąd udzielono odpowiedzi na to pytanie, uruchomiono inne rozwiązanie.
https://github.com/appjs/appjs
W chwili pisania tego tekstu jest to kompleksowe rozwiązanie do pakowania aplikacji node.js za pomocą uproszczonego pakietu chromu skompilowanego do pliku wykonywalnego.
Edycja: AppJS nie jest już aktywny, ale sam sugeruje widelec zwany deskshell.
https://github.com/sihorton/appjs-deskshell/
źródło
Jest tutaj wiele dobrych odpowiedzi, ale nie wszystkie są tak proste jak JXcore .
Po zainstalowaniu JXcore w systemie Windows wystarczy uruchomić:
Spowoduje to utworzenie pliku .exe, który możesz rozpowszechniać i który można uruchomić bez żadnych zewnętrznych zależności (nie potrzebujesz nawet JXcore ani Node.js w systemie).
Oto dokumentacja dotycząca tej funkcji: http://jxcore.com/packaging-code-protection/#cat-74
Edytuj 2018
Ten projekt jest teraz martwy, ale nadal jest hostowany tutaj: https://github.com/jxcore/jxcore-release (dzięki @Elmue)
źródło
Spróbujdisclose
: https://github.com/pmq20/disclosedisclose
zasadniczo tworzy samorozpakowujący się plik exe z projektu Node.js i interpretera Node.js o następujących cechach,Brak GUI. Czysty CLI.Brak zależności czasu wykonywaniaObsługuje zarówno Windows, jak i UnixDziała powoli po raz pierwszy (wyodrębnianie do katalogu pamięci podręcznej), a następnie szybko w nieskończonośćSpróbuj
node-compiler
: https://github.com/pmq20/node-compilerStworzyłem nowy projekt o nazwie,
node-compiler
aby skompilować projekt Node.js w jeden plik wykonywalny.Jest to lepsze niż
disclose
to, że po raz pierwszy nigdy nie działa wolno, ponieważ Twój kod źródłowy jest kompilowany wraz z interpretera Node.js, tak jak standardowe biblioteki Node.js.Ponadto przekierowuje żądania dotyczące plików i katalogów w sposób niewidoczny dla pamięci zamiast do systemu plików w czasie wykonywania. Dzięki temu do uruchomienia skompilowanego produktu nie jest wymagany kod źródłowy.
Jak to działa: https://speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable
W porównaniu z podobnymi projektami,
pkg ( https://github.com/zeit/pkg ): Pkg zhakował fs. * API dynamicznie, aby uzyskać dostęp do plików w pakiecie, podczas gdy kompilator Node.js zostawia je w spokoju i zamiast tego działa na głębszym poziomie za pośrednictwem libsquash. Pkg używa formatu JSON do przechowywania plików w pakiecie, podczas gdy kompilator Node.js wykorzystuje bardziej wyrafinowany i powszechnie używany SquashFS jako strukturę danych.
EncloseJS ( http://enclosejs.com/ ): EncloseJS ogranicza dostęp do plików w pakiecie tylko do pięciu API fs. *, Podczas gdy kompilator Node.js obsługuje wszystkie API fs. *. EncloseJS jest objęty licencją zastrzeżoną i pobiera opłaty, gdy jest używany, podczas gdy kompilator Node.js jest na licencji MIT, a użytkownicy mogą go używać i modyfikować.
Nexe ( https://github.com/nexe/nexe ): Nexe nie obsługuje dynamicznego wymagania ze względu na użycie browserify, podczas gdy Node.js Compiler obsługuje wszystkie rodzaje wymagań, w tym require.resolve.
asar ( https://github.com/electron/asar ): Asar używa formatu JSON do przechowywania informacji o plikach, podczas gdy kompilator Node.js używa SquashFS. Asar oddziela archiwum kodu i plik wykonywalny, podczas gdy kompilator Node.js łączy cały kod źródłowy JavaScript razem z maszyną wirtualną Node.js i generuje pojedynczy plik wykonywalny jako produkt końcowy.
AppImage ( http://appimage.org/ ): AppImage obsługuje tylko Linuksa z jądrem obsługującym SquashFS, podczas gdy kompilator Node.js obsługuje wszystkie trzy platformy Linux, macOS i Windows, w międzyczasie bez żadnych specjalnych wymagań dotyczących funkcji z jądra.
źródło
Polecam Ci BoxedApp do tego. Jest to produkt komercyjny, który działa bardzo dobrze. Działa z każdą aplikacją NodeJS. Użytkownik końcowy otrzyma tylko jeden plik EXE dla Twojej aplikacji. Nie ma potrzeby instalacji.
Na przykład w Electron użytkownik końcowy musi zainstalować / zdekompresować twoją aplikację i zobaczy wszystkie pliki źródłowe twojego kodu.
BoxedApp Pakuje wszystkie pliki i zależności, których potrzebuje Twoja aplikacja NodeJS. Obsługuje kompresję, a skompilowany plik działa w systemie Windows XP +
Kiedy go używasz, pamiętaj, aby dodać Node.EXE do skompilowanej aplikacji. Wybierz wersję węzła obsługującą system Windows XP (jeśli tego potrzebujesz)
Program obsługuje argumenty wiersza poleceń, więc po pakiecie możesz to zrobić
I możesz pobrać argument w swoim kodzie węzła:
Czasami twoja aplikacja ma zależności plików, więc w BoxedApp możesz dodać dowolny folder i plik jako zależność, na przykład możesz wstawić plik ustawień.
Więcej informacji:
źródło
Zauważyłem, że którekolwiek z tych rozwiązań spełnia moje wymagania, więc stworzyłem własną wersję node o nazwie node2exe, która to robi. Jest dostępny pod adresem https://github.com/areve/node2exe
źródło
Eksplorowałem ten temat od kilku dni i oto co znalazłem. Opcje dzielą się na dwie kategorie:
Jeśli chcesz zbudować aplikację komputerową, najlepsze opcje to:
Oto dobre porównanie między nimi: Porównanie NW.js i Electron . Myślę, że NW.js jest lepszy i zapewnia również aplikację do kompilowania plików JS. Istnieje również kilka samodzielnych programów do tworzenia plików wykonywalnych i instalatorów, takich jak Enigma Virtual Box . Oba zawierają osadzoną wersję Chrome, która jest niepotrzebna dla aplikacji serwerowych.
jeśli chcesz spakować aplikację serwerową, są to najlepsze opcje:
W tej kategorii uważam, że kompilator węzłów jest lepszy, który obsługuje dynamiczne wymagania i natywne moduły węzłów. Jest bardzo łatwy w użyciu, a wyjście zaczyna się od 25 MB. Pełne porównanie z innymi rozwiązaniami można przeczytać na stronie Node Compiler. Nie czytałem wiele o Nexe, ale na razie wydaje się, że Node Compiler nie kompiluje pliku js do formatu binarnego za pomocą funkcji migawki V8, ale jest planowany dla wersji 2. Będzie miał również wbudowany kreator instalatora.
źródło
Electron
nie uzasadnia bycia ważną sugestią dotyczącą PO; jest to zupełnie inna struktura Node.Wypróbuj nexe, który tworzy pojedynczy plik wykonywalny z aplikacji node.js.
https://github.com/nexe/nexe
źródło
Zmęczyłem się rozpoczynaniem wygranej z wiersza poleceń, a następnie natknąłem się na to. Nieznacznie ulepszona wer. nad czym josh3736 . To używa pliku XML, aby pobrać kilka ustawień. Na przykład ścieżka do
Node.exe
oraz plik, który ma zostać uruchomiony w domyślnym pliku app.js. Również środowisko do załadowania (produkcja, programowanie itp.), Które określiłeś w swoim app.js (lub server.js, czy jakkolwiek to nazwałeś). Zasadniczo dodajeNODE_ENV={0}
gdzie {0} jest nazwą konfiguracji w app.js jako zmienną dla Ciebie. Robisz to, modyfikując element „mode” w config.xml. Możesz pobrać projekt tutaj ==> github . Zauważ, że w zdarzeniach po kompilacji możesz zmodyfikować ścieżki kopiowania, aby automatycznie kopiować plik config.xml i plik wykonywalny doNodejs
katalog, aby zapisać krok. W przeciwnym razie wyedytuj je lub Twoja kompilacja wyświetli ostrzeżenie.źródło
Może być wiele innych opcji, ale o ile wiem, jeden projekt jest aktywnie rozwijany na GitHub https://github.com/zeit/pkg . Możesz się tym bawić. Jeszcze jedno na https://github.com/nexe/nexe, ale nie w aktywnym rozwoju.
źródło
Istnieje projekt narzędzia do tworzenia open source o nazwie nodebob . Zakładam, że okna platformy roboczej,
Plik wykonywalny znajdziesz w folderze wydania.
źródło