Using Cargo workspaces with a `napi-rs` project
Using workspaces to manage crates and dependencies within a default `napi-rs` project.
Creating a new project with https://napi.rs is as easy as:
npm install -g @napi-rs/cli
Followed by...
napi new
... which is great. But I wanted to keep the project within a Cargo Workspace
so I made the following changes (using the project name bslive
, which stands for Browsersync Live, in case you wondered)
Step 1
Create a new directory at the root level of the project
mkdir bslive
Step 2
Move the following files/folders
src/lib.rs
build.rs
Cargo.toml
into
bslive/src/lib.rs
bslive/build.rs
bslive/Cargo.toml
Should look something like:
![](/cargo-workspace.png)
Step 3
Now create a new Cargo.toml
in the root of the project, to replace the one you just moved
Cargo.toml
workspace.members = ["bslive"]
workspace.resolver = "2"
Step 4
The last is to tell napi
where to build from (since it defaults to the root of the project).
In the package.json
file, find the scripts
section and change both build
and build:debug
to include the
flag --cargo-name <name>
package.json
- "build": "napi build --platform --release",
+ "build": "napi build --cargo-name bslive --platform --release",
- "build:debug": "napi build --platform",
+ "build:debug": "napi build --cargo-name bslive --platform",
Done!
Now you can create lots of separate crates in the root of the project (or under a common subdirectory, like crates
)
and the regular workspace improvements will apply :)