Есть ли в Node JavaScript библиотека, которая показывает диалоговое окно проводника (выбора файла)

Нужна библиотека, которая показывает диалоговое окно проводника (выбора файла) на Node JS. То есть, нужно окно выбора файла и когда мы выбрали файл, то в переменную записывается абсолютный путь этого файла.


Ответы (1 шт):

Автор решения: nörbörnën

Структура проекта:

введите сюда описание изображения

Запуск и результат

$ node src/open-file-dialog/index.js 
... выбор файлов в диалоге выбора файлов ...

[
  '/Users/nörbörnën/Work/apple-wallet/z/manifest.json',
  '/Users/nörbörnën/Work/apple-wallet/z/pass.json'
]

index.js

const { spawn } = require('child_process');
const path = require('path');
const electronPath = require('electron');

(async () => {
  try {
    console.log(await filesSelection());
  } catch (err) {
    console.error(err);
  }
})();

async function filesSelection() {
  return new Promise((resolve, reject) => {
    const child = spawn(`${electronPath}`, [path.join(__dirname, 'dialog.js')]);

    let out = '';
    child.stdout.on('data', (data) => out += data);
    child.stderr.on('data', reject);
    child.on('close', (code) => {
      try {
        if (code === 0) {
          return resolve(JSON.parse(out));
        }
        reject(new Error(`child process exited with code ${code}`));
      } catch (err) {
        reject(err);
      }
    });
  });
}

dialog.js

const { app, dialog } = require('electron');

app.on('ready', async () => {
  try {
    const res = await dialog.showOpenDialog({
      properties: ['openFile', 'multiSelections']
    });
    process.stdout.write(JSON.stringify(res?.filePaths || []));
    process.exit(0);
  } catch (err) {
    console.error(err);
    process.exit(1);
  }
});
→ Ссылка