Tauri2文件选择器爬坑

#software

我想实现的功能是把项目封装后,点击按钮保存文件时打开一个文件对话框,然后可以自行选择保存路径,设定文件名称,然后保存。

使用的是下面这个代码

import { save } from '@tauri-apps/plugin-dialog'

const filePath = await save({
    defaultPath: `maneloca_${version}_${new Date().toISOString().slice(0, 10)}.tsv`, // 默认文件名
    filters: [{
      name: 'TSV Files',
      extensions: ['tsv'] // 限制文件类型为 TSV
    }]
})

但是封装后点击对应的按钮,没有反应。因为我没有任何前端知识,和AI斗智斗勇了N个回合,还是无法找到合适的方案。后来发现应该是AI的知识还停留在Tauri 1,只能自己查文档了。

保存至文件对话框

下面是Tauri 2保存文件的示例代码

import { save } from '@tauri-apps/plugin-dialog';
// when using `"withGlobalTauri": true`, you may use
// const { save } = window.__TAURI__.dialog;

// Prompt to save a 'My Filter' with extension .png or .jpeg
const path = await save({
  filters: [
    {
      name: 'My Filter',
      extensions: ['png', 'jpeg'],
    },
  ],
});
console.log(path);
// Prints the chosen path

但是呢,我的代码本就是按照这个方案进行的,仍然无法弹出对应的对话框。在对代码补充了一个try之后,发现这段代码应该是报错了,没有跑进去,然而后端没有错误提示。AI说是tauri配置文件的问题。

配置文件

AI说要先在配置文件中允许插件运行,给我修改建议如下所示。

{
  "tauri": {
    "allowlist": {
      "dialog": {
        "all": true, // 允许所有 dialog 功能
        "save": true // 明确允许 save 功能
      }
    }
  }
}

但我在修改时,提示配置文件不允许"tauri"字段,感觉又是版本迭代后配置的方式不同了。在Tauri 2的文档中写了在需要使用插件的项目中应该如何配置。

我用了tauri的fs和dialog插件,那么就应该在配置文件中加入

"plugins": {
    "dialog" : true,
    "fs": true
}

我这样设置后,还是不行。

需要安装

之前我一直是只安装了js库

npm install @tauri-apps/plugin-fs

实际上要通过tauri安装

npm run tauri add dialog

所以其实就这样然后其他配置都不用改,AI误我😭。

最后测试可以用了

npm run tauri dev

我觉得有点复杂,考虑转投electron。