An utility function for bundling Node.js single executable applications.
From Node.js 20, it supports Single Executable Applications experimentally. This package integrates the binary bundle steps with unbuild following Single executable applications | Node.js v20.0.0 Document.
npm i -D presea
import { bundle } from 'presea'
await bundle('path/to/package')
This is working in progress.
npm i -g presea
echo "console.log('Hello')" > cli.js
presea cli.js
Here is an example GitHub Actions config to bundle single executable applications.
You should replace <bin>
to your own binary name which is the same as your package.json
or your build config.
name: Release
on:
push:
tags:
- 'v*'
jobs:
bundle:
name: Bundle on ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: linux
os: ubuntu-latest
binary: ./dist/<bin>
- target: windows
os: windows-latest
binary: .\dist\<bin>.exe
steps:
- uses: actions/checkout@v3
- name: Setup pnpm
uses: pnpm/action-setup@v2.2.4
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 20.x
cache: pnpm
- name: Install
run: pnpm install
- name: Build
run: pnpm build # now binary is located at matrix.binary
# Upload to release and so on...
Warning
Currently, SEA only supports for a single script, and can not require other node_modules.
But unbuild can not bundle the whole project into a single script.
You should provide field bin
in your package.json
like the following config.
{
"bin": {
"hello": "./dist/hello.mjs"
}
}
Import presea preset in your build.config.ts
.
// build.config.ts
import { defineBuildConfig } from 'unbuild';
import { Sea } from 'presea/unbuild';
export default defineBuildConfig({
preset: Sea(),
// Your config...
});
Then, just run unbuild
and the bundled single executable application is in your output directory.
$ npx unbuild
$ ./dist/hello world
Hello, world!
- Clone this repository
- Use
pnpm
as the package manager (npm i -g pnpm
) - Install dependencies using
pnpm install
- Build the module using
pnpm build
or stub the module usingpnpm dev
- Test the bundle using
cd example && pnpm i && pnpm build
MIT License © 2023 XLor