Git Product home page Git Product logo

package-template-pnpm's Introduction

@napi-rs/package-template

https://github.com/napi-rs/package-template/actions

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.

Test

With 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 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:

$ 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 [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

git push

GitHub actions will do the rest job for you.

package-template-pnpm's People

Contributors

renovate[bot] avatar brooooooklyn avatar himself65 avatar ahaoboy avatar

Stargazers

Kevin Firko avatar henry-yu-lb avatar Helox avatar Jamie Mason avatar 文博 avatar  avatar Jonas Galvez avatar Zhazha_JiaYiZhen avatar Mattèo Gauthier avatar Daniel Boll avatar Lawrence Onah avatar

Watchers

 avatar liuyi avatar  avatar

Forkers

ahaoboy himself65

package-template-pnpm's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

cargo
Cargo.toml
  • napi 2
  • napi-derive 2
  • napi-build 2
github-actions
.github/workflows/CI.yml
  • actions/checkout v4
  • pnpm/action-setup v4
  • actions/setup-node v4
  • actions/cache v4
  • goto-bus-stop/setup-zig v2
  • actions/setup-node v4
  • actions/upload-artifact v4
  • actions/upload-artifact v4
  • actions/checkout v4
  • cross-platform-actions/action v0.25.0
  • actions/upload-artifact v4
  • actions/checkout v4
  • pnpm/action-setup v4
  • actions/setup-node v4
  • actions/download-artifact v4
  • actions/checkout v4
  • pnpm/action-setup v4
  • actions/setup-node v4
  • actions/download-artifact v4
  • docker/setup-qemu-action v3
  • addnab/docker-run-action v3
  • actions/checkout v4
  • pnpm/action-setup v4
  • actions/setup-node v4
  • actions/download-artifact v4
  • actions/checkout v4
  • pnpm/action-setup v4
  • actions/setup-node v4
  • actions/download-artifact v4
.github/workflows/lint.yml
  • actions/checkout v4
  • pnpm/action-setup v4
  • actions/setup-node v4
npm
package.json
  • @emnapi/core ^1.2.0
  • @emnapi/runtime ^1.2.0
  • @napi-rs/cli 3.0.0-alpha.62
  • @napi-rs/wasm-runtime ^0.2.4
  • @swc-node/register ^1.10.6
  • @swc/core ^1.6.13
  • @taplo/cli ^0.7.0
  • @tybys/wasm-util ^0.9.0
  • ava ^6.1.3
  • chalk ^5.3.0
  • emnapi ^1.2.0
  • husky ^9.0.11
  • lint-staged ^15.2.7
  • npm-run-all2 ^6.2.2
  • oxlint ^0.7.0
  • prettier ^3.3.3
  • tinybench ^2.8.0
  • typescript ^5.5.3
  • node >= 10
  • pnpm 9.7.1

  • Check this box to trigger a request for Renovate to run again on this repository

Question: prettier or biome for formatting?

Setting up another NAPI library, wanted to use pnpm, and found this, so thanks!

Was curious: I see that the preconfigured linter is oxlint, but the preconfigured formatter is prettier, not biome. Is there any particular reason why? (biome is also backed by oxc internally, I think)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.