【tauri开发】在nodejs环境下调用cargo库

440 阅读1分钟

省流直接说,使用cargo-run-bin

类似于你在package.json里写scripts,然后npm run

背景

为什么要在nodejs里去做调用cargo库这种操作呢?

那就要从changelog开始讲起了,也就是更新日志。按照keepachangelog的规范进行书写更新日志,我有一个功能就是根据指定版本号(比如1.1.1)找到对应的描述内容

# Changelog## [1.1.1] - 2023-03-05### Added
​
- Arabic translation (#444).
​
## [1.1.0] - 2019-02-15### Added
​
- Danish translation (#297).

但我在npm找了一圈都是运行nodejs环境下的库,因为我的应用是tauri(js+rust),于是我将目光转向cargo,顺利找到了parse-changelog

我在后续发布版本的时候遇到了一个问题,如果我在写这个版本的更新日志时写错了,发布后出现解析不了,看不到日志该怎么办?

于是我只能在发布前,对更新日志的内容进行校验,但手动检查也太麻烦了,于是便有了如标题所说的需求

方案

在Cargo.toml以一下格式添加第三方库

使用cargo bin CRATE的形式即可在src-tauri目录下进行调用

使用的parse-changelog也能以cli形式进行调用

# src-tauri/Cargo.toml[package.metadata.bin]
parse-changelog = { version = "^0.6" }

使用execa进行命令的调用

// scripts/release.jsconst run = (bin, args, opts = {}) =>
  execa(bin, args, { stdio: 'inherit', ...opts })
​
const base = p => path.join(path.dirname(fileURLToPath(import.meta.url)), p)
​
async function checkChangelog(version) {
  const dir = base('../changelog')
  const list = await fs.readdir(dir)
  for (const name of list) {
    await run('cargo', ['bin', 'parse-changelog', '-t', path.join(dir, name), version], {
      cwd: base('../src-tauri'),
    })
  }
}

结尾

这样就完成了,一个cargo库同时用在了开发和生产环境上🎉

具体release文件,见这里