Emballage de votre application Node.js en un seul exécutable.
Il faut moins de 5 minutes pour compiler tout projet avec node-packer .
Vous n'aurez pas besoin de modifier une seule ligne de code dans votre application, peu importe comment vous l'avez développée tant qu'elle fonctionne dans Node Plain.JS!
Fenêtres,
macOS et
Linuxrequire , y compris les dynamiques (par exemple require(myPath + 'module.js' )Voici la dernière version stable Node.js Packer:
| OS | Cambre. | Exécutable |
|---|---|---|
| Fenêtre | x64 | https://gw.alipayobjects.com/os/enclose-prod/0d0ec8fd-dc9c-4b0a-85df-8bf4af0e8b8d/nodec-v1.5.0-x64.zip |
| macos | x64 | https://gw.alipayobjects.com/os/enclose-prod/bc2022ef-4b88-4c12-9980-394945c9c198/nodec-v1.5.0-darwin-x64.gz |
| Linux | x64 | https://gw.alipayobjects.com/os/enclose-prod/b6aa41a6-f6b5-4542-b777-06e4bc292c5e/nodec-v1.5.0-linux-x64.gz |
Chaque fois que la branche master CI réussissait, un binaire pré-libéré Node.js Packer serait automatiquement généré. Voici la dernière construction instable de pré-libération:
| OS | Cambre. | Exécutable |
|---|---|---|
| Fenêtre | 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/releases/download/linux-x64/pre-release-nodec-v140800.121803-Linux-x64 |
Installer sur WindowsInstallez d'abord les conditions préalables:
Téléchargez ensuite nodec-x64.exe .
Facultativement, mettez-le sous C:Windows ou tout autre répertoire PATH . Ouvrez "X64 Native Tools Command nodec --help "
Installer sur macOSInstallez d'abord les conditions préalables:
brew install squashfsCommand Line Tools via Xcode. Vous pouvez le trouver sous le menu Xcode -> Preferences -> Downloadsgcc et la chaîne d'outils connexe make Téléchargez ensuite nodec-darwin-x64 .
Exécutez chmod +x pour lui donner des autorisations d'exécution et exécuter ./nodec --help .
Selon la construction récente de Travis, les cas de test échoueront peu de temps après que son lancement se produise lorsque l'environnement de construction est Xcode 11. Actuellement, on ne sait pas si le problème est causé par Xcode 11 ou d'autres facteurs au sein de Travis CI qui peuvent ne pas avoir un impact sur le déploiement de la macOS réel.
Par conséquent, l'environnement de construction pour macOS sous Travis est Xcode 10.2 afin de s'assurer que le cas de test peut être exécuté avec succès et terminé.
Installer sur LinuxInstallez d'abord les conditions préalables:
sudo yum install squashfs-toolssudo apt-get install squashfs-toolsgcc et g++ 4.9.4 ou plus récent, ouclang et clang++ 3.4.2 ou plus récent Téléchargez ensuite nodec-linux-x64 .
Exécutez chmod +x pour lui donner des autorisations d'exécution et exécuter ./nodec --help .
Il est connu que le repo par défaut pour Red Hat et CentOS Distros contient un GCC / G ++ très obsolète (3,8,5) tandis que le dernier support à long terme (LTS) d'Ubuntu au 15 février 2018 (Ubuntu 18.04 LTS) contient un GCC / G ++ (7.3.0) relativement mis à jour.
Il est connu que la compilation peut échouer lors de l'utilisation de configuration non prise en charge où la version des prérequis est plus ancienne que prescrite.
Par conséquent, il est crucial pour les utilisateurs de Distros basés sur Red Hat d'installer GCC / G ++ à l'extérieur des références officielles. Pour commencer, on peut regarder:
De plus, les binaires compilés à partir de LTS Ubuntu 18.04 sont connus pour ne pas fonctionner dans la distribution basée sur Red Hat 7 (y compris les CentOS) en raison de l'erreur liée à `` GLIBCXX_3.4.20 «non trouvée». Cependant, les binaires compilés à partir de Red Hat ou de CentOS 7 sont connus pour fonctionner avec Ubuntu 18.04 LTS basé sur mon expérience interne.
Cela dit, je recommanderai toujours que les distributeurs binaires devraient compiler 2 versions pour Linux où l'on s'adresse à la base de RHEL et l'autre pour Ubuntu basé.
Selon la construction récente de Travis, Linux ne parvient pas à construire depuis NODEC-1.6.0-10.16.0 (Node.js 10.16.0). La cause profonde n'est pas encore déterminée, et la dernière bonne construction connue est 10.15.3 qui peut être téléchargée ici: https://github.com/slee047/node-packer/releases/tag/1.6.0-10.15.3-1
Le problème peut être trouvé ici: https://github.com/slee047/node-packer/issues/11
Remarque: Ce fichier GZ (NODEC-DARWIN-X64.GZ) contient une version obsolète de NODEC (NODEC 1.5.0 avec Node.js 8.3.0). Le mainteneur d'origine n'a pas précisé comment construire ce dépôt en exécutable unique, donc les versions plus récentes ne peuvent être exécutées que directement sur le code source.
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
Remarque: Si l'entrée n'a pas été fournie, un seul interprète brut Node.js serait produit.
Remarque: Pour compiler avec des programmes compatibles à 32 bits Windows OS sur une machine 64 bits, vous devez utiliser un environnement de compilation croisée X64 X32. Vous devriez pouvoir le trouver dans votre menu Démarrer après l'installation de Visual Studio. En outre, vous devez utiliser un Node.js 32 bits, car les informations Arch sont détectées via node -pe process.arch .
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)
| Projet | Différences |
|---|---|
| pkg | PKG a piraté fs.* L'API est dynamiquement afin d'accéder aux fichiers intégrés, tandis que Node.js Packer les laisse seuls et travaille à un niveau plus profond via Libsquash. PKG utilise JSON pour stocker des fichiers intra-package tandis que Node.js Packer utilise les squashfs plus sophistiqués et largement utilisés comme structure de données. |
| Fermeaux | ENCLOSEJS limite l'accès aux fichiers intégrés à seulement cinq fs.* API, tandis que Node.js Packer prend en charge toutes fs.* API. Enclosejs est sous licence propriétaire et facture de l'argent lorsqu'il est utilisé tandis que Node.js Packer est limité par MIT et que les utilisateurs sont tous deux libres de l'utiliser et de le modifier. |
| Nexe | NExe ne prend pas en charge require dynamique en raison de son utilisation de browserify , tandis que le packer Node.js prend en charge toutes sortes de require y compris require.resolve . |
| asar | ASAR maintient l'archive de code et l'exécutable séparé tandis que le packer Node.js relie tout le code source JavaScript avec la machine virtuelle Node.js et génère un seul exécutable comme produit final. ASAR utilise JSON pour stocker les informations des fichiers tandis que Node.js Packer utilise SquashFS. |
| Applimager | AppImage prend en charge uniquement Linux avec un noyau qui prend en charge Squashfs, tandis que Node.js Packer prend en charge les trois plates-formes de Linux, MacOS et Windows, en attendant sans aucune fonctionnalité spéciale du noyau. |
nodec prend également en charge la compilation croisée. Étant donné que Node.js est construit à partir de sources, vous devrez configurer correctement une chaîne d'outils afin d'obtenir des compilateurs valides pour produire des binaires pour la plate-forme de destination.
Vous pouvez facilement le faire en utilisant Crosstool-NG ou tout autre outil que vous aimez.
Une fois que vous avez terminé la construction d'une chaîne d'outils valide (n'oubliez pas d'activer C ++ si vous utilisez Crosstool-NG qui, par défaut, l'exclue), vous pourrez compiler correctement. Configurez simplement votre environnement afin qu'il sache pour utiliser votre chaîne d'outils croisée plutôt que les outils de construction par défaut de votre système.
Un exemple (vous devrez peut-être ajuster les valeurs ou spécifier des variables supplémentaires):
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