Package your Node.js project into an executable.
This project is targeted for apps built with Yue library and Yode Node.js runtime.
npm i -g yackage
Usage: yackage [options] [command]
Options:
--platform <platform> Target platform (default: $npm_config_platform ||
process.platform)
--arch <arch> Target arch (default: $npm_config_arch ||
process.arch)
--app-dir <dir> Path to the source code dir of app (default:
current working dir)
--unpack <pattern> Files to ignore when generating asar package
(default: *.node)
--unpack-dir <pattern> Dirs to ignore when generating asar package
--no-minify Do not minify the JavaScript source code
--extra-info-plist The extra string to insert into the Info.plist
--identity <identity> The identity used for signing app bundle on macOS
--entitlements <entitlements> Path to the entitlements file when signing app
bundle on macOS
Commands:
init Create an empty project under current directory
build <outputDir> Build app bundle
dist <outputDir> Build app bundle and generate app distribution
dirty-build <outputDir> Build app bundle without reinstalling modules
Note that before using Yackage, the target app must have fetch-yode listed
as a dependency.
Configure your project by adding following fields to package.json:
{
"main": "app.js",
"build": {
"appId": "com.app.id"
"productName": "App"
"copyright": "Copyright © 2020 Company",
"minify": true,
"unpack": "+(*.node|*.png)",
"unpackDir": "{assets,build}",
"ignore": [ "assets/*" ],
"icons": {
"win": "assets/icon.ico",
"mac": "assets/icon.icns"
},
"extraInfoPlist": "<key>LSUIElement</key><true/>"
}
}Generate executable from the app under current working directory:
cd /path/to/app/
yackage build outGenerate executable from path under arbitrary path:
yackage build out --app-dir /path/to/app
Generate executable for arbitrary platform:
yackage build out --platform win32 --arch ia32
Generate distributions:
yackage dist out --app-dir /path/to/app
- Run
npm packto generate tarball for the app. - Extract the tarball to temporary directory and run
npm install. - Use
asarto pacakge the app and its dependencies. - Append the generated ASAR archive to Yode.
- Yode would automatically recognize the ASAR archive appended in the executable and start with it.
By default yackage would unpack the .node files so they are not extracted
dynamically when running, otherwise anti-virus softwares would complain.
The unpacked files are placed in the res directory instead of the usual
.unpacked directory, so the final distribution would look more formal.
The .js files are compressed with uglify-js by default.
The virutal root directory of ASAR archive is ${process.execPath}/asar. Using
process.execPath as virutal root directory directly would confuse Node.js
since it should be a file.
Public domain.