【问题标题】:While developing a package for Atom, how to write to a JSON file inside the package folder?在为 Atom 开发包时,如何写入包文件夹中的 JSON 文件?
【发布时间】:2020-04-19 02:48:50
【问题描述】:

我正在为 Atom 文本编辑器开发一个包,为了使该包能够工作,它会读取一些充当简单数据库的 JSON 文件。此外,这些 JSON 文件应使用从公共电子表格中获取的数据定期更新,因此必须将它们写入。

然而,问题在于使用fs.writeFile,路径是相对于用户的主文件夹,而不是相对于包文件夹。虽然我可以使用.atom/packages/package-name/file.json 之类的路径,但就我对 Atom 包的有限了解而言,这并不是一个好的做法(或者是吗?)。

还有其他解决方案吗?

【问题讨论】:

    标签: javascript json persistence atom-editor


    【解决方案1】:

    我认为在脚本中使用相对路径没有问题,如下所示:

    const pathToJson = path.resolve(__dirname, 'file.json`);
    // next: write data to JSON
    

    但是,如果您真的想使用绝对路径,有几个选择。

    Atom API

    您可以在包中使用 Atom API,它公开了 resolvePackagePath() 方法:

    const packagePath = atom.packages.resolvePackagePath('name-of-your-package');
    const pathToJson = path.resolve(packagePath, 'file.json`);
    // next: write data to JSON
    

    您可以将其与以下 sn-p 结合使用以从清单中检索包名称:

    const { name } = require('./package.json');
    

    第三方包

    atom-read-manifest 包允许您执行相同操作,而无需指定包的名称 - 但我猜这是个人品味问题。

    const { readManifest } = require('atom-read-manifest');
    // or use readManifestSync
    
    (async () => {
        const { name } = await readManifest();
    
        const packagePath = atom.packages.resolvePackagePath(name);
        const pathToJson = path.resolve(packagePath, 'file.json`);
        // next: write data to JSON
    })();
    

    最后一点:如果您的程序包正在将数据写入 JSON,那么可能有更好的方法来实现这一点。您需要考虑更新包将覆盖您的旧file.json。就个人而言,我更喜欢将数据写入 Atom 的 localStorage(或 IndexedDB)。如果您更喜欢将数据写入 JSON 文件,那么您应该将其保存到 .atom/storage

    【讨论】:

    • 我不知道__dirname。这样就彻底解决了问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多