在为 Atom 开发包时,如何写入包文件夹内的 JSON 文件?
While developing a package for Atom, how to write to a JSON file inside the package folder?
我正在为 Atom 文本编辑器开发一个程序包,为了使该程序包正常工作,它会读取一些充当简单数据库的 JSON 文件。此外,这些 JSON 文件应使用从 public 电子表格中获得的数据定期更新,因此必须写入它们。
但是,问题是使用 fs.writeFile
,路径是相对于用户的主文件夹,而不是包文件夹。虽然我可以使用像 .atom/packages/package-name/file.json
这样的路径,但就我对 Atom 包的有限了解而言,这并不是一个好的做法(或者是吗?)。
还有其他解决方案吗?
我没有发现像这样在脚本中使用相对路径的问题:
const pathToJson = path.resolve(__dirname, 'file.json`);
// next: write data to JSON
但是,如果您真的想要使用绝对路径,则有多种选择。
原子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
您可以将其与以下代码片段结合使用以从清单中检索包名称:
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
。
我正在为 Atom 文本编辑器开发一个程序包,为了使该程序包正常工作,它会读取一些充当简单数据库的 JSON 文件。此外,这些 JSON 文件应使用从 public 电子表格中获得的数据定期更新,因此必须写入它们。
但是,问题是使用 fs.writeFile
,路径是相对于用户的主文件夹,而不是包文件夹。虽然我可以使用像 .atom/packages/package-name/file.json
这样的路径,但就我对 Atom 包的有限了解而言,这并不是一个好的做法(或者是吗?)。
还有其他解决方案吗?
我没有发现像这样在脚本中使用相对路径的问题:
const pathToJson = path.resolve(__dirname, 'file.json`);
// next: write data to JSON
但是,如果您真的想要使用绝对路径,则有多种选择。
原子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
您可以将其与以下代码片段结合使用以从清单中检索包名称:
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
。