App packaging
While you can let users install your app via npm install
, it is recommended to
package your app and ship platform specific app bundles, so users can get best
desktop experience.
Yode supports appending ASAR archive to the executable and starting from it, so
for apps using Yue the best way to package is using yackage
, which
can automatically put the app into ASAR archive and concatenate it to Yode.
By packaging the app you can also gain extra benefits like avoiding long path
names problem on Windows, and speeding up the require
calls.
Using yackage
The README of yackage
has detailed usage instructions, basically
you can generate independent app bundle under out/
directory with:
yackage build out/
Limitations of Node APIs
Due to the low-level nature of the Node APIs, there are some limitations when using Node APIs after you packaged your app, details can be found at https://electronjs.org/docs/tutorial/application-packaging#limitations-of-the-node-api.
Limitations of Yue APIs
Yue is essentially a thin wrapper of native APIs, which do not recognize ASAR archives. So the APIs of Yue can not read files inside ASAR archives, i.e., can not read your app's files when packaged.
Currently you can solve this by using the --unpack
flag to exclude the assets
of your app when using yackage
, and in your app's code use fs.realpath
to
get the filesystem path of the assets before passing the path to Yue APIs.
For example you can unpack the images when using yackage
:
yackage dist out --unpack "+(*.node|*.png)"
And in app's code call fs.realpath
before reading the images:
const p = fs.realpathSync(path.join(__dirname, 'image.png'))
const image = gui.Image.createFromPath(p)