presea
Version:
An unbuild preset for bundling Node single executable applications
122 lines (84 loc) • 2.81 kB
Markdown
# presea
[](https://www.npmjs.com/package/presea) [](https://github.com/yjl9903/presea/actions/workflows/ci.yaml)
An [unbuild](https://github.com/unjs/unbuild) preset for bundling Node single executable applications.
From [Node.js 20](https://nodejs.org/en/blog/announcements/v20-release-announce), it supports Single Executable Applications experimentally. This package integrates the binary bundle steps with [unbuild](https://github.com/unjs/unbuild) following [Single executable applications | Node.js v20.0.0 Document](https://nodejs.org/api/single-executable-applications.html).
## Installation
```bash
npm i -D presea
```
## Usage
You should provide field `bin` in your `package.json` like the following config.
```JSON
{
"bin": {
"hello": "./dist/hello.mjs"
}
}
```
Import presea preset in your `build.config.ts`.
```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.
```bash
$ npx unbuild
$ ./dist/hello world
Hello, world!
```
### Programmatic Usage
```ts
import { bundle } from 'presea'
await bundle('path/to/package')
```
### GitHub Actions
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.
```yaml
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...
```
## Development
+ 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 using `pnpm dev`
+ Test the bundle using `cd example && pnpm i && pnpm build`
## License
MIT License © 2023 [XLor](https://github.com/yjl9903)