Комментарии 10
nodeIntegration: trueне делайте так.
const { remote } = require('electron')remote модуль тоже желательно не использовать, он уже диприкейтнут.
Вместо этого следует использовать IPC коммуникацию в явном виде, то есть без nodeIntegration / remote хаков.
// не делайте так.
Обоснуйте. Любое инженерное решение не является абсолютным и подразумевает контекст.
В некоторых контекстах — проще влепить nodeIntegration: true без всяких угроз безопасности. Это наше приложение, наш код, мы его контролируем. Если есть доступ чужого JS-скрипта, удаленной веб-страницы — ну это вопрос к вам, почему и зачем вы это допускает в Электроне. Тогда да, ставьте nodeIntegration: false и городите усложненную архитектуру с делегацией запросов.
Программисты — это инженеры, а не веруны в догмы. Любое утверждение должно иметь четко описанный контекст применения.
Чаще всего в крупных/серьезных проектах существует разделение на фронтендеров и бэкендеров, со своей зоной ответственности. Включение флага nodeIntegration позволяет фронтендерам выходить за пределы своих полномочий. Поэтому общение между процессами main/node и renderer/web должно происходить через лимитированный набор функций / API. То есть получается архитектура клиент/сервер. В итоге ответственности разделены и наружу из main процесса выставляется только определенный функционал, безопасность обеспечить проще. Кроме этого получаем побочные преимущества тк веб не завязан жестко на прямое использование API ноды/электрона: 1) например проще мокнуть этот API и тестировать веб часть автономно 2) в случае надобности проще поменять/переключить исполнителя запроса от фронтенда или даже заменить электрон на что-то похожее имея тот же веб. 3) и тд.
ставьте nodeIntegration: false и городите усложненную архитектуру с делегацией запросов.Если используется подход «nodeIntegration: true», то архитектура как таковая отсутствует и следовательно там нечего усложнять. Использовать подход «nodeIntegration: true» это как делать прямые запросы к базе данных из PHP шаблона в 2020 году.
Крутое слово архитектура, можно вставить его в любой пост, упомянуть многострадальный php и готово. Наличие лишнего слоя ни чего не говорит о безопасности, это просто лишний слой, который заставляет вас сеарилизовать и десеарилизовывать данные и поверьте это далеко не последнее место где допускают ошибки… А если ваш код это не тривиальный туду лист, то тут ещё выходит на сцену адекватное потребление ресурсов. А Про мокать и тестить, тут уже совсем смешно, если конечно вы подцепляете fs и читаете файлик с диска прямо рядышком с вашим шаблоном, то это немного другое, но как только у вас появляется отдельные сервисы для вашей бизнес логики, то ни проблем с переносом кода во что то другое ни тем более в веб, не возникает. Но про веб это чаще сказки, приложений которые так смогли — единицы.
Наличие лишнего слоя ни чего не говорит о безопасностиРечь не просто о слое, а об ограничении набора бэкенд функционала выставленного для использования на фронте. По аналогии клиент/сервер со стороны фронтенда просто не будет возможности совершить непредусмотренные действия. Для прототипов или шарашкиных проектов это конечно не имеет значения.
это просто лишний слой, который заставляет вас сеарилизовать и десеарилизовывать данныеСериализация происходит в любом случае, не все это понимают. В случае использования обертки / API взаимодействия, например, механизм сериализации можно изменить так как существует единая точка входа в логику обмена данными между процессами, например паковать данные в MessagePack формат (иногда это приоритетный вариант).
если конечно вы подцепляете fs и читаете файлик с диска прямо рядышком с вашим шаблономПри «nodeIntegration: true» это технически возможно. То что технически возможно когда-то происходит, не важно по каким причинам.
но как только у вас появляется отдельные сервисы для вашей бизнес логики, то ни проблем с переносом кода во что то другое ни тем более в веб, не возникаетТе кто использует «nodeIntegration: true» как правило не оборачивают весь вызываемый из main/node/backend процесса функционал в фасад. Поэтому там каша, мешанина веб и бэкенд логики. Такую кашу, как правило, в случае неободимости разгребать/разделять не просто.
Соглашусь, надо в первую очередь понимать что и зачем. А то частенько попадаются ситуации когда nodeIntegration: false, а следом в preload.js window.require = require.
Как подружить Electron и Webix