@hzttt/lucy-blob-node-native
v0.3.0
Published
NAPI bindings for lucy-blob-core — cross-platform native loader with optionalDependencies per-triple sub-packages
Readme
@hzttt/lucy-blob-node-native
NAPI-RS addon wrapping lucy-blob-core, distributed via the
industry-standard optionalDependencies multi-subpackage pattern (same
approach as sharp, @napi-rs/canvas, lightningcss). Each platform ships a
dedicated ~10 MB sub-package; installers only download the one matching their
OS/arch/libc.
Layout
@hzttt/lucy-blob-node-native main loader (~2 kB, index.js + d.ts)
├── @hzttt/lucy-blob-node-native-darwin-arm64 ⎫
├── @hzttt/lucy-blob-node-native-darwin-x64 ⎪
├── @hzttt/lucy-blob-node-native-linux-x64-gnu ⎪ optionalDependencies —
├── @hzttt/lucy-blob-node-native-linux-arm64-gnu ⎬ npm fetches only the one
├── @hzttt/lucy-blob-node-native-linux-x64-musl ⎪ matching the host.
├── @hzttt/lucy-blob-node-native-linux-arm64-musl ⎪
├── @hzttt/lucy-blob-node-native-win32-x64-msvc ⎪
└── @hzttt/lucy-blob-node-native-win32-arm64-msvc ⎭The loader in index.js resolves the right sub-package at runtime based on
process.platform, process.arch, and (for Linux) musl vs glibc detection.
Build
From this directory, with Node 18+, Rust 1.89+, and Docker:
# Native host (darwin-arm64 on Apple Silicon, linux-x64-gnu on CI, etc.)
npm install
npm run build
# All supported Linux triples in one go (via Docker cross-build)
../scripts/build-all.sh
# One specific triple
../scripts/docker-cross-build.sh linux-arm64-gnu \
aarch64-unknown-linux-gnu \
rust:1.89-bookworm \
linux/arm64Each build copies lucy_blob_node_native.<triple>.node into
npm/<triple>/, which is the publishable sub-package directory.
Publish
# Dry-run (default): shows every tarball that would be uploaded
../scripts/publish-all.sh
# Execute: uploads sub-packages first, then the main loader.
../scripts/publish-all.sh --executeThe script publishes only sub-packages that actually have a .node built, so
partial releases work (e.g. publishing darwin + linux-x64 now, adding musl /
windows later).
Version bumps: keep the main package version and every sub-package version in
lockstep; napi.config.json + package.json are the source of truth, and
napi create-npm-dirs regenerates the npm/<triple>/package.json files.
