При разработке пакета для Atom, как записать в файл JSON внутри папки пакета? - PullRequest
0 голосов
/ 19 апреля 2020

Я разрабатываю пакет для текстового редактора Atom, и для того, чтобы этот пакет работал, он читает некоторые файлы JSON, которые действуют как простая база данных. Кроме того, эти JSON файлы должны периодически обновляться данными, полученными из электронной таблицы c, поэтому они должны быть записаны в.

Однако проблема в том, что при использовании fs.writeFile пути являются относительными в домашнюю папку пользователя, а не в папку пакета. Хотя я мог бы использовать путь, подобный .atom/packages/package-name/file.json, к моим ограниченным знаниям пакетов Atom, это не похоже на хорошую практику (или это так?).

Существуют ли другие решения?

1 Ответ

1 голос
/ 19 апреля 2020

Я не вижу проблемы с использованием относительных путей в вашем скрипте, например, так:

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

Однако, если вы действительно хотите использовать абсолютные пути, есть несколько вариантов.

API Atom

Вы можете использовать API Atom внутри вашего пакета, который предоставляет метод 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* Пакет 1027 * позволяет вам делать то же самое без указания названия вашей упаковки - но это вопрос личного вкуса, я думаю.

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. Лично я предпочел бы записать данные в localStorage Atom (или IndexedDB). Если вы предпочитаете записывать данные в файл JSON, то вам, вероятно, следует сохранить его в .atom/storage.

...