Verpacken Sie Ihre Node.js -Anwendung in eine einzelne ausführbare Datei.
Es dauert weniger als 5 Minuten, um ein Projekt mit node-packer zu kompilieren.
Sie müssen keine einzelne Codezeile in Ihrer Anwendung ändern, egal wie Sie ihn entwickelt haben, solange er in einfachem Node.js funktioniert!
Fenster,
macos und
Linuxrequire , einschließlich dynamischer (z. B. require(myPath + 'module.js' ).Hier ist die neueste stabile Node.js Packer -Veröffentlichung:
| Betriebssystem | Bogen. | Ausführbar |
|---|---|---|
| Fenster | x64 | https://gw.alipayobjects.com/os/encrose-prod/0d0ec8fd-dc9c-4b0a-85df-8bf4af0e8b8d/nodec-v1.5.0-x64.zip |
| macos | x64 | https://gw.alipayobjects.com/os/encrose-prod/bc2022ef-4b88-4c12-9980-394945c9c198/nodec-v1.5.0-darwin-x64.gz |
| Linux | x64 | https://gw.alipayobjects.com/os/encrose-prod/b6aa41a6-f6b5-4542-b777-06e4bc292c5e/nodec-v1.5.0-linux-x64.gz |
Immer wenn der master -Zweig CI erfolgreich war, würde ein Node.js Packer-Binärbinärer automatisch generiert. Hier ist der neueste instabile Gebäude vor der Veröffentlichung:
| Betriebssystem | Bogen. | Ausführbar |
|---|---|---|
| Fenster | x64 | https://github.com/pmq20/node-packer/releases/download/windows-x64/pre-release-nodec-v140800.121803-x64.exe |
| macos | x64 | https://github.com/pmq20/node-packer/releases/download/darwin-x64/pre-release-nodec-v140800.121803-darwin-x64 |
| Linux | x64 | https://github.com/pmq20/node-packer/releass/download/linux-x64/pre-release-nodec-v140800.121803-linux-x64 |
Installieren Sie unter WindowsInstallieren Sie zuerst die Voraussetzungen:
Laden Sie dann nodec-x64.exe herunter.
Stellen Sie es optional unter C:Windows oder andere PATH ein. Öffnen Sie die "X64 native Tools -Eingabeaufforderung" von Visual Studios und führen Sie nodec --help darin aus.
Auf macOS installierenInstallieren Sie zuerst die Voraussetzungen:
brew install squashfsCommand Line Tools über Xcode installieren. Sie finden dies unter dem Menü Xcode -> Preferences -> Downloadsgcc und die zugehörige ToolChain, make enthält Laden Sie dann nodec-darwin-x64 herunter.
Führen Sie chmod +x aus, um ihm Ausführungsberechtigungen zu geben, und führen Sie aus ./nodec --help .
Laut dem jüngsten Travis -Build scheitern die Testfälle kurz nach dem Start, wenn die Build -Umgebung Xcode 11 ist. Derzeit ist nicht bekannt, ob das Problem durch Xcode 11 oder andere Faktoren innerhalb von Travis CI verursacht wird, die sich möglicherweise nicht auf die tatsächliche MacOS -Bereitstellung auswirken.
Daher ist die Build -Umgebung für macOS unter Travis Xcode 10.2, um sicherzustellen, dass der Testfall erfolgreich ausgeführt und abgeschlossen werden kann.
Installieren Sie unter LinuxInstallieren Sie zuerst die Voraussetzungen:
sudo yum install squashfs-toolssudo apt-get install squashfs-toolsgcc und g++ 4.9.4 oder neuer oderclang und clang++ 3.4.2 oder neuer Laden Sie dann nodec-linux-x64 herunter.
Führen Sie chmod +x aus, um ihm Ausführungsberechtigungen zu geben, und führen Sie aus ./nodec --help .
Es ist bekannt, dass das Standard -Repo für Red Hat und CentOS -Distributionen einen sehr veralteten GCC / G ++ (3,8,5) enthält, während die neueste Langzeitunterstützung (LTS) von Ubuntu ab dem 15. Februar 2018 (Ubuntu 18.04 LTs) einen relativ aktualisierten GCC / G ++ (7.3.0) enthält.
Es ist bekannt, dass die Kompilierung bei der Verwendung einer nicht unterstützten Konfiguration fehlschlagen kann, bei der die Version der Voraussetzungen älter als vorgeschrieben ist.
Daher ist es für die Benutzer von Red Hat -basierter Distribution von entscheidender Bedeutung, GCC / G ++ außerhalb der offiziellen Repos zu installieren. Für den Anfang kann man sich ansehen:
Darüber hinaus ist bekannt, dass Binärdateien, die aus Ubuntu 18.04 LTS zusammengestellt sind, aufgrund eines "GLIBCXX_3.4.20, der nicht gefundenen" nicht gefundenen Fehler gefunden wurde. Es ist jedoch bekannt, dass Binärdateien, die entweder aus Red Hat oder CentOS 7 zusammengestellt werden, mit Ubuntu 18.04 LTs basierend auf meinem internen Experiment zusammenarbeiten.
Trotzdem werde ich immer noch empfehlen, dass Binariesverteidiger 2 Versionen für Linux kompilieren sollten, bei denen man rhelbasiert und der andere für Ubuntu basiert.
Laut dem jüngsten Travis Build hat Linux seit NODEC-1.6.0-10.16.0 (NODE.JS 10.16.0) nicht erstellt. Die Grundursache muss noch ermittelt werden, und der letzte bekannte gute Build ist 10.15.3, der hier heruntergeladen werden kann: https://github.com/slee047/node-packer/releases/tag/1.6.0-10.15.3-1
Das Problem finden Sie hier: https://github.com/slee047/node-packer/issues/11
Hinweis: Diese GZ-Datei (Nodec-darwin-x64.gz) enthält eine veraltete Version von Nodec (Nodec 1.5.0 mit Node.js 8.3.0). Der ursprüngliche Betreuer hat nicht angegeben, wie dieses Repo in eine einzelne ausführbare Datei erstellt wird, daher können neuere Versionen nur direkt auf dem Quellcode ausgeführt werden.
nodec [OPTION]... [ENTRANCE]
--current Uses the current Node.js release
--lts Uses the LTS Node.js release
-r, --root=DIR Specifies the path to the root of the application
--output=FILE Specifies the path of the output file
-d, --tmpdir=DIR Specifies the directory for temporary files
--clean-tmpdir Cleans all temporary files that were generated last time
--keep-tmpdir Keeps all temporary files that were generated last time
--make-args=ARGS Passes extra arguments to make
--vcbuild-args=ARGS Passes extra arguments to vcbuild.bat
-n, --npm=FILE Specifies the path of npm
--skip-npm-install Skips the npm install process
--debug Enables debug mode
-o, --dest-os=OS Specifies the destination operating system (enum: win mac solaris freebsd openbsd linux android aix)
-a, --dest-arch=ARCH Specifies the destination CPU architecture (enum: arm arm64 ia32 mips mipsel ppc ppc64 x32 x64 x86 s390 s390x)
--quiet Enables quiet mode
-v, --version Prints the version of nodec and exit
-h, --help Prints this help and exit
HINWEIS: Wenn kein Eingang vorgesehen wäre, wird ein einzelner Rohknoten.JS -Interpreter -ausführbarer Datei erzeugt.
Hinweis: Um zu kompatiblen 32-Bit-Windows-Betriebssystemprogrammen auf einer 64-Bit-Maschine zu kompilieren, sollten Sie eine x64 x32-Kreuzkompilierumgebung verwenden. Sie sollten es nach der Installation von Visual Studio in Ihrem Startmenü finden können. Außerdem müssen Sie einen 32 -Bit -Knoten.js verwenden, da die Bogeninformationen über node -pe process.arch erkannt werden.
git clone --depth 1 https://github.com/jashkenas/coffeescript.git
cd coffeescript
nodec bin/coffee
./a.out (or a.exe on Windows)
git clone --depth 1 https://github.com/eggjs/examples.git
cd examples/helloworld
npm install
nodec node_modules/egg-bin/bin/egg-bin.js
./a.out dev (or a.exe dev on Windows)
| Projekt | Unterschiede |
|---|---|
| pkg | PKG hackte fs.* APIs dynamisch, um auf In-Package-Dateien zuzugreifen, während Node.js Packer sie in Ruhe lässt und stattdessen über Libsquash auf einer tieferen Ebene arbeitet. PKG verwendet JSON, um In-Package-Dateien zu speichern, während Node.js Packer die anspruchsvolleren und weit verbreiteten Squashfs als Datenstruktur verwendet. |
| Einschließen | EncoseJS beschränkt den Zugriff auf In-Package-Dateien auf nur fünf fs.* APIs, während Node.js Packer alle fs.* APIs unterstützt. EncoseJS ist proprietär lizenziert und berechnet Geld, wenn Node.js Packer mit MIT-lizenziert ist, und Benutzer können es kostenlos verwenden und es frei haben, es zu ändern. |
| Nexe | Nexe require aufgrund seiner require.resolve von browserify nicht require . |
| Asar | ASAR hält das Codearchiv und die ausführbare Datei separat, während Node.js Packer alle JavaScript -Quellcode zusammen mit dem virtuellen Node.js -Maschine verknüpft und eine einzelne ausführbare Datei als Endprodukt generiert. Asar verwendet JSON, um Dateieninformationen zu speichern, während Node.js Packer Squashfs verwendet. |
| Appimage | AppImage unterstützt nur Linux mit einem Kernel, der Squashfs unterstützt, während Node.js Packer alle drei Plattformen von Linux, MacOS und Windows unterstützt, ohne spezielle Feature -Anforderungen aus dem Kernel. |
nodec unterstützt auch die Kreuzkompilierung. Da Node.js aus Quellen erstellt wird, müssen Sie eine Toolchain ordnungsgemäß einrichten, um gültige Compiler für die Erstellung von Binärdateien für die Zielplattform zu erhalten.
Sie können dies problemlos mit Crosstoel-NG oder einem anderen Tool verwenden, das Sie mögen.
Sobald Sie mit dem Aufbau eines gültigen Toolchains fertig sind (vergessen Sie nicht, C ++ zu aktivieren, wenn Sie Crosstool-NG verwenden, was standardmäßig ausschließt), können Sie ordnungsgemäß kompilieren. Richten Sie einfach Ihre Umgebung so ein, dass Sie wissen, dass Sie Ihre Cross-Compile-Toolchain anstelle der Standard-Build-Tools Ihres Systems verwenden.
Ein Beispiel (Sie müssen möglicherweise Werte anpassen oder zusätzliche Variablen angeben):
export AR="x86_64-unknown-linux-gnu-ar"
export CC="x86_64-unknown-linux-gnu-gcc"
export CXX="x86_64-unknown-linux-gnu-g++"
export LINK="x86_64-unknown-linux-gnu-g++"
export CPP="x86_64-unknown-linux-gnu-gcc -E"
export LD="x86_64-unknown-linux-gnu-ld"
export AS="x86_64-unknown-linux-gnu-as"
export CCLD="ax86_64-unknown-linux-gnu-gcc ${TARGET_ARCH}"
export NM="x86_64-unknown-linux-gnu-nm"
export STRIP="x86_64-unknown-linux-gnu-strip"
export OBJCOPY="x86_64-unknown-linux-gnu-objcopy"
export RANLIB="x86_64-unknown-linux-gnu-ranlib"
export F77="x86_64-unknown-linux-gnu-g77 ${TARGET_ARCH}"
unset LIBC
#Define flags
#export CXXFLAGS="-march=armv7-a"
export LDFLAGS="-L${CSTOOLS_LIB} -Wl,-rpath-link,${CSTOOLS_LIB} -Wl,-O1 -Wl,--hash-style=gnu"
export CFLAGS="-isystem${CSTOOLS_INC} -fexpensive-optimizations -frename-registers -fomit-frame-pointer -O2 -ggdb3"
export CPPFLAGS="-isystem${CSTOOLS_INC}"
# export CCFLAGS="-march=armv7-a"
#Tools
export CSTOOLS=/Volumes/crosstools/x86_64-unknown-linux-gnu
export CSTOOLS_INC=${CSTOOLS}/include
export CSTOOLS_LIB=${CSTOOLS}/lib
#export ARM_TARGET_LIB=$CSTOOLS_LIB
# export GYP_DEFINES="armv7=1"
#Define other things, those are not 'must' to have defined but we added
export SHELL="/bin/bash"
export TERM="screen"
export LANG="en_US.UTF-8"
export MAKE="make"
#Export the path for your system
#export HOME="/home/gioyik" #Change this one with the name of your user directory
export PATH=${CSTOOLS}/bin:/usr/arm-linux-gnueabi/bin/:$PATH
Minqi Pan et al.
MIT