Я не вижу проблемы с использованием относительных путей в вашем скрипте, например, так:
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
.