http://enclose.io/
https://github.com/pmq20/node-packer
Node.js Packer
Packing your Node.js application into a single executable.
Features
- Works on Linux, Mac and Windows
- Creates a binary distribution of your application
- Supports natively any form of
require
, including dynamic ones (e.g.require(myPath + 'module.js'
) - Supports any module, including direct download and compilation from npm
- Native C++ modules are fully supported
- Features zero-config auto-update capabilities to make your compiled project to stay updated
- Open Source, MIT Licensed
Get Started
It takes less than 5 minutes to compile any project with node-compiler
.
You won't need to modify a single line of code in your application, no matter how you developed it as long as it works in plain node.js!
Operating System | Architecture | Latest Stable |
---|---|---|
Windows | x86-64 | |
macOS | x86-64 | |
Linux | x86-64 |
For previous releases, cf.
Install on Windows
First install the prerequisites:
- Either of,
- , all editions including the Community edition (remember to select "Common Tools for Visual C++ 2015" feature during installation).
- , any edition (including the Build Tools SKU). Required Components: "MSbuild", "VC++ 2017 v141 toolset" and one of the Windows SDKs (10 or 8.1).
Then download , and this zip file contains only one executable. Unzip it. Optionally, rename it to nodec.exe
and put it under C:\Windows
(or any other directory that is part of PATH
). Execute nodec
from the command line.
Install on Linux
First install the prerequisites:
-
sudo yum install squashfs-tools
sudo apt-get install squashfs-tools
gcc
andg++
4.9.4 or newer, orclang
andclang++
3.4.2 or newer- Python 2.6 or 2.7
- GNU Make 3.81 or newer
Then,
curl -L http://enclose.io/nodec/nodec-linux-x64.gz | gunzip > nodecchmod +x nodec./nodec
Install on macOS
First install the prerequisites:
- :
brew install squashfs
-
- You also need to install the
Command Line Tools
via Xcode. You can find this under the menuXcode -> Preferences -> Downloads
- This step will install
gcc
and the related toolchain containingmake
- You also need to install the
- Python 2.6 or 2.7
- GNU Make 3.81 or newer
Then,
curl -L http://enclose.io/nodec/nodec-darwin-x64.gz | gunzip > nodecchmod +x nodec./nodec
Usage
nodec [OPTION]... [ENTRANCE] -r, --root=DIR Specifies the path to the root of the application -o, --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 --npm-package=NAME Downloads and compiles the specified npm package --npm-package-version=VER Downloads and compiles the specified version of the npm package --auto-update-url=URL Enables auto-update and specifies the URL to get the latest version --auto-update-base=STRING Enables auto-update and specifies the base version string --msi Generates a .msi installer for Windows --pkg Generates a .pkg installer for macOS --debug Enable debug mode --quiet Enable quiet mode -v, --version Prints the version of nodec and exit -V, --node-version Prints the version of the Node.js runtime and exit -h, --help Prints this help and exit
Note: if ENTRANCE
was not provided, then a single Node.js interpreter executable will be produced.
Note: To compile to 32-bit windows OS compatible programs on a 64-bit machine, you should use a x64 x32 cross compiling environment. You should be able to find it in your Start Menu after installing Visual Studio. Also, you have to use a 32-bit Node.js, because the arch information is detected via node -pe process.arch
.
Examples
Compile a CLI tool
git clone --depth 1 https://github.com/jashkenas/coffeescript.gitcd coffeescriptnodec bin/coffee./a.out (or a.exe on Windows)
Compile a web application
git clone --depth 1 https://github.com/eggjs/examples.gitcd examples/helloworldnpm installnodec node_modules/egg-bin/bin/egg-bin.js./a.out dev (or a.exe dev on Windows)
Compile a npm package
nodec --npm-package=coffee-script coffee./a.out (or a.exe on Windows)
Learn More
How it works
- .
Comparing with Similar Projects
Project | Differences |
---|---|
Pkg hacked fs.* API's dynamically in order to access in-package files, whereas Node.js Compiler leaves them alone and instead works on a deeper level via . Pkg uses JSON to store in-package files while Node.js Compiler uses the more sophisticated and widely used SquashFS as its data structure. | |
EncloseJS restricts access to in-package files to only five fs.* API's, whereas Node.js Compiler supports all fs.* API's. EncloseJS is proprietary licensed and charges money when used while Node.js Compiler is MIT-licensed and users are both free to use it and free to modify it. | |
Nexe does not support dynamic require because of its use of browserify , whereas Node.js Compiler supports all kinds of require including require.resolve . | |
Asar keeps the code archive and the executable separate while Node.js Compiler links all JavaScript source code together with the Node.js virtual machine and generates a single executable as the final product. Asar uses JSON to store files' information while Node.js Compiler uses SquashFS. | |
AppImage supports only Linux with a kernel that supports SquashFS, while Node.js Compiler supports all three platforms of Linux, macOS and Windows, meanwhile without any special feature requirements from the kernel. |
See Also
- : portable, user-land SquashFS that can be easily linked and embedded within your application.
- : cross-platform C library to enable your application to auto-update itself in place.