【问题标题】:Where to store global binary data for a vscode extension在哪里存储 vscode 扩展的全局二进制数据
【发布时间】:2019-01-04 13:26:07
【问题描述】:

我为 VS 代码编写了一个语言服务器扩展。为了提高启动时间,我想缓存一些全局状态。我正在努力寻找一个安全、用户透明的位置。

  • 缓存在所有工作区之间共享
  • 它包含 200-300MB 的序列化数据
  • 它应该在扩展更新之间持续存在
  • 扩展是跨平台的

我发现了以下四个选项,但似乎都不合适:

  1. ExtensionContext.extensionPath:这几乎是完美的。对用户来说,安全的沙盒空间是显而易见的。但是,它会在扩展程序更新时被清除。
  2. ExtensionContext.storagePath:这不是全局的,用户很难清除,因此很快就会使用 GB 的存储空间。
  3. ExtensionContext.globalState:将 300MB 的二进制数据放入 JSON 字典存储似乎很糟糕。
  4. %UserData%/linux/OSX 等效项:在不受控制的一般用户空间中添加和删除文件是我宁愿避免的风险。

存储这些数据的合适位置在哪里?

【问题讨论】:

  • 你最后选择了什么?
  • 我问的原因是我喜欢globalStoragePath,它非常有用,但是对于扩展贡献点内部的路径很难使用。 (即 package.json 中的 html.experiment.customData = './mystuff'。我无法将 $globalStoragePath/mystuff 放入我的扩展的 package.json 中,然后在使用时扩展。)跨度>
  • @bkelley 我仍在使用 storagePath,但 globalStoragePath 符合我的要求。事实上,当我创建这个问题时,他们已经创建了它,但它仍然处于“建议”状态。你需要它来做什么贡献?我强烈建议您在 github 上创建一个问题来询问该功能,也许参考 #66030。

标签: visual-studio-code vscode-extensions


【解决方案1】:

2019 年 1 月发布的 VS Code 添加了ExtensionContext.globalStoragePath,这是storagePath 的全球版本

扩展可以存储全局状态的绝对文件路径。该目录可能不存在于磁盘上,创建取决于扩展名。但是,父目录保证存在。

https://code.visualstudio.com/updates/v1_31#_global-storage-path

【讨论】:

    【解决方案2】:

    您可能需要考虑创建在用户设置中定义的文件路径;我认为这个解决方案涵盖了您的所有要求。

    您可以在 package.json 中设置一个默认值,它对用户是透明的——他们可以根据需要更改它。

    更多信息在这里:https://code.visualstudio.com/api/references/contribution-points#contributes.configuration

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 2021-12-10
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2015-01-07
      • 2013-01-10
      相关资源
      最近更新 更多