Как мне использовать диалоги использования в среде electron react?

#javascript #node.js #reactjs #electron

#javascript #node.js #reactjs #electron

Вопрос:

(клонируйте репозиторий и попробуйте его)

Я работаю над настольным приложением, используя node, create-react-app и electron. Следующая строка, рекомендуемая здесь

 const { dialog } = require('electron').remote
  

при добавлении в мой store компонент react (и, следовательно, не в основной процесс electron) вызывает следующую ошибку:

 TypeError: fs.existsSync is not a function
getElectronPath
F:/freelance/repos/creative-ontology-editor/node_modules/electron/index.js:8
   5 | var pathFile = path.join(__dirname, 'path.txt');
   6 | 
   7 | function getElectronPath() {
>  8 |   if (fs.existsSync(pathFile)) {
   9 |     var executablePath = fs.readFileSync(pathFile, 'utf-8');
  10 | 
  11 |     if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
  

Я полагаю, это связано с тем, что React или create-react-app специально блокируют / аннулируют определенные node.js модули вроде fs , но я могу ошибаться. Обратите внимание, что эта ошибка возникает внутри electron модуля, когда я включаю приведенную выше строку, а не в свой собственный код.

Моя цель — сделать так, чтобы мое настольное приложение могло сохранять и загружать файлы на компьютер пользователя, как это делают что-то вроде Word или Excel.

Я вызвал const fs = window.require('fs'); в своем компоненте react, чего, я думаю, я не должен делать, но также, поскольку это есть в самом electron модуле index.js , я убедился, что он также вызывает это, что он и делает: var fs = require('fs') . Когда я переключил свой вызов в компоненте react на const fs = window.require('fs') , никаких изменений в поведении не произошло.

Я также позаботился о том, чтобы установить webPreferences.nodeIntegration значение true в моем основном процессе electron, но безрезультатно.

Комментарии:

1. Давайте сначала исключим простейшую причину: вы вызывали const fs = require('fs'); ?

2. @ChrisG Я обновил вопрос с этими деталями.

3. Проверьте, есть ли у вас где-нибудь ` webPreferences: { nodeIntegration: false }`

4. @LeonardoBuscemi, насколько я могу найти, нет. Насколько я понимаю, create-node-app управляет множеством настроек и требований, но я не могу их видеть. Может ли это быть скрыто за этой завесой?