https://github.com/napi-rs/package-template-pnpm
Template project for using napi-rs to build native package via pnpm.
https://github.com/napi-rs/package-template-pnpm
Last synced: 4 months ago
JSON representation
Template project for using napi-rs to build native package via pnpm.
- Host: GitHub
- URL: https://github.com/napi-rs/package-template-pnpm
- Owner: napi-rs
- License: mit
- Created: 2024-01-07T12:40:52.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-16T08:11:47.000Z (7 months ago)
- Last Synced: 2025-04-19T23:03:54.873Z (7 months ago)
- Language: JavaScript
- Size: 363 KB
- Stars: 17
- Watchers: 4
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# `@napi-rs/package-template`

> Template project for writing node packages with napi-rs.
# Usage
1. Click **Use this template**.
2. **Clone** your project.
3. Run `pnpm install` to install dependencies.
4. Run `npx napi rename -n [name]` command under the project folder to rename your package.
## Install this test package
```
pnpm add @napi-rs/package-template
```
## Usage
### Build
After `pnpm build` command, you can see `package-template.[darwin|win32|linux].node` file in project root. This is the native addon built from [lib.rs](./src/lib.rs).
### Test
With [ava](https://github.com/avajs/ava), run `pnpm test` to testing native addon. You can also switch to another testing framework if you want.
### CI
With GitHub Actions, each commit and pull request will be built and tested automatically in [`node@18`, `node@20`] x [`macOS`, `Linux`, `Windows`] matrix. You will never be afraid of the native addon broken in these platforms.
### Release
Release native package is very difficult in old days. Native packages may ask developers who use it to install `build toolchain` like `gcc/llvm`, `node-gyp` or something more.
With `GitHub actions`, we can easily prebuild a `binary` for major platforms. And with `N-API`, we should never be afraid of **ABI Compatible**.
The other problem is how to deliver prebuild `binary` to users. Downloading it in `postinstall` script is a common way that most packages do it right now. The problem with this solution is it introduced many other packages to download binary that has not been used by `runtime codes`. The other problem is some users may not easily download the binary from `GitHub/CDN` if they are behind a private network (But in most cases, they have a private NPM mirror).
In this package, we choose a better way to solve this problem. We release different `npm packages` for different platforms. And add it to `optionalDependencies` before releasing the `Major` package to npm.
`NPM` will choose which native package should download from `registry` automatically. You can see [npm](./npm) dir for details. And you can also run `pnpm add @napi-rs/package-template` to see how it works.
## Develop requirements
- Install the latest `Rust`
- Install `Node.js@16+` which fully supported `Node-API`
- Run `corepack enable`
## Test in local
- pnpm
- pnpm build
- pnpm test
And you will see:
```bash
$ ava --verbose
✔ sync function from native code
✔ sleep function from native code (201ms)
─
2 tests passed
✨ Done in 1.12s.
```
## Release package
Ensure you have set your **NPM_TOKEN** in the `GitHub` project setting.
In `Settings -> Secrets`, add **NPM_TOKEN** into it.
When you want to release the package:
```
npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=] | from-git]
git push
```
GitHub actions will do the rest job for you.