#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
управляет множеством настроек и требований, но я не могу их видеть. Может ли это быть скрыто за этой завесой?