📦 boxednode – Ship a JS file with Node.js in a box
Take
- A JavaScript file
- Node.js
and pack them up as a single binary.
For example:
$ cat example.js
console.log('Hello, world!');
$ boxednode -s example.js -t example
$ ./example
Hello, world!
CLI usage
Options:
--version Show version number [boolean]
-c, --clean Clean up temporary directory after success [boolean]
-s, --source Source .js file [string] [required]
-t, --target Target executable file [string] [required]
-n, --node-version Node.js version or semver version range
[string] [default: "*"]
-C, --configure-args Extra ./configure or vcbuild arguments, comma-separated
[string]
-M, --make-args Extra make or vcbuild arguments, comma-separated[string]
--tmpdir Temporary directory for compiling Node.js source[string]
--help Show help [boolean]
Node.js versions may be specific versions, semver ranges, or any of the aliases
supported by https://github.com/pkgjs/nv/.
Programmatic API
type CompilationOptions = {
nodeVersionRange: string;
tmpdir?: string;
sourceFile: string;
targetFile: string;
configureArgs?: string[];
makeArgs?: string[];
clean?: boolean;
env?: { [name: string]: string | undefined };
namespace?: string;
addons?: AddonConfig[];
enableBindingsPatch?: boolean;
preCompileHook?: (nodeSourceTree: string, options: CompilationOptions) => void | Promise<void>;
executableMetadata?: ExecutableMetadata;
};
type AddonConfig = {
path: string;
requireRegexp: RegExp;
};
type ExecutableMetadata = {
name?: string;
description?: string;
version?: string;
manufacturer?: string;
copyright?: string;
icon?: string;
};
export function compileJSFileAsBinary(options: CompilationOptions);
The BOXEDNODE_CONFIGURE_ARGS
environment variable will be read as a
comma-separated list of strings and added to configureArgs
, and likewise
BOXEDNODE_MAKE_ARGS
to makeArgs
.
Why this solution
We needed a simple and reliable way to create shippable binaries from a source
file.
Unlike others, this solution:
- Works for Node.js v12.x and above, without being tied to specific versions
- Uses only officially supported, stable Node.js APIs
- Creates binaries that are not bloated with extra features
- Creates binaries that can be signed and notarized on macOS
- Supports linking native addons into the binary
Prerequisites
This package compiles Node.js from source. See the Node.js
BUILDING.md file for
a complete list of tools that may be necessary.
Releasing
To release a new version, run the following command in main:
npm version [patch|minor|major] && npm it & npm publish && git push origin main --tags
Not supported
Similar projects
License
Apache-2.0