banner
Madinah

Madinah

github
twitter
telegram
email
bilibili

napi-rsを使用して開発環境を構築する

napi-rs#

https://napi.rs/docs/introduction/getting-started は、Rust を使用して Node のアドオンを開発するための便利なコマンドを提供しています。farm も napi-rs をベースに開発されており、このセクションでは napi-rs のセットアッププロセスとデバッグコマンドの追加について記録しています。これにより、デバッグ体験が向上します。
詳細な手順

  1. プロジェクトの初期化 https://napi.rs/docs/introduction/getting-started 公式ウェブサイトの手順に従ってプロジェクトディレクトリを初期化します。
  2. pnpm + cargo を使用して既存のプロジェクトをモノレポプロジェクトに変換します
    a. 以前の yarn ファイルを削除し、pnpm-workspakce.yaml を作成して、pnpm install を実行します。
    b. 以前の Rust プロジェクトもモノレポ形式に変換します。具体的な設定ファイルは以下の通りです。
# pnpm-workspace.yaml
packages:
  - packages/*
  - examples/*
  - crates/*
<!-- Cargo.toml -->
[workspace]
members = ["crates/*"]
resolver = "2"

[workspace.dependencies]
napi = {version = "2.15.0", default-features = false, features = [
  "napi4",
  "error_anyhow",
  "serde-json",
]}
napi-derive = "2.15.0"
  1. 必要なパッケージを追加します
cli
    ├── Cargo.toml
    ├── build.rs
    └── src
        └── lib.rs

具体的なファイルの内容

# Cargo.toml
[package]
edition = "2021"
name = "farm_cli"
version = "0.1.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[lib]
crate-type = ["cdylib"]

[dependencies]
napi = {workspace = true}
napi-derive = {workspace = true}

[build-dependencies]
napi-build = "2.0.1"

[profile.release]
lto = true
strip = "symbols"

build.rs

use napi_build::setup;

fn main() {
    setup()
}
#![deny(clippy::all)]

#[macro_use]
extern crate napi_derive;

#[napi]
pub fn sum(a: i32, b: i32) -> i32 {
  a + b
}
  1. packages ディレクトリのファイル構造
cli
    ├── binding
    │   ├── binding.cjs
    │   ├── binding.d.ts
    │   └── index.darwin-arm64.node
    ├── package.json
    └── src
        └── index.js

binding ファイルの生成方法

以下のコマンドを追加します

"build:rs:debug": "napi build --platform --cargo-name farm_cli -p farm_cli --cargo-cwd ../../ binding --js binding.cjs --dts binding.d.ts"

index.cjs

const { sum }  = require('../binding/binding.cjs')
const total = sum(1,2);
console.log(total)

テスト実行して問題ないことを確認します

image

デバッグの追加
.vscode に以下を追加します

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "sourceLanguages": ["rust"],
      "name": "debug rust",
      "program": "node",
      "preLaunchTask": "npm: build:debug",
      "args": ["--inspect", "${file}"]
    }
  ]
}

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "npm",
      "script": "build:dev",
      "group": "build",
      "problemMatcher": [],
      "label": "npm: build:debug"
    }
  ]
}

デバッグの効果

image

これで環境のセットアップが完了しました
コードの場所はこちらです https://github.com/Maidang1/rust-learn-code/commit/51f5d71cdf9c6a3aa691057523e9145a9bde81af

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。