Как стать автором
Обновить

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

nodeIntegration: true
не делайте так.
const { remote } = require('electron')
remote модуль тоже желательно не использовать, он уже диприкейтнут.

Вместо этого следует использовать IPC коммуникацию в явном виде, то есть без nodeIntegration / remote хаков.
Ok
Может я ошибаюсь, но «nodeIntegration: false» актуально при отображении удаленного контента это написано вот тут. Если приложение работает локально то почему нет?
все верно сказали. Запрещать node integration нужно для BrowserWindow that loads remote content.

// nodeIntegration: true
// не делайте так.

Обоснуйте. Любое инженерное решение не является абсолютным и подразумевает контекст.
В некоторых контекстах — проще влепить 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.

а следом в preload.js window.require = require.
Иногда так делают в preload который не попадает в продакшен сборку, но подключается только для для e2e / spectron тестов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории