添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Electron 12+ 出现 require is not defined 报错解决
  • 更新:2021-03-18 09:52:18
  • 首发:2021-03-18 09:44:46
  • 教程
  • 6179

在 Electron 12 及更高版本,设置了 nodeIntegration: true nodeIntegrationInWorker: true nodeIntegrationInSubframes: true ,渲染进程仍然可能出现 require is not defined 的报错。

这个报错还跟随有 module is not defined exports is not defined

同样的报错在Electron 5+曾出现过,原因是发布 v5.0.0 的时候,官方将 nodeIntegration 默认值设置为了 false (与此同时还将 webviewTag 设置为了 false )。

近期,Electron 12.0.0 发布。修复了诸多异常。同时也将 contextIsolation 的默认值更改为 true (详见: https://github.com/electron/electron/pull/27949 )。

官方特地将此默认值修改作为 重大更改 。特地提示如下:

在Electron 12中, contextIsolation 默认情况下将启用。若要还原以前的行为, contextIsolation: false 必须在WebPreferences中指定。

我们 建议启用contextIsolation 以确保应用程序的 安全

另一个含义是,除非 nodeIntegration 值为 true 并且 contextIsolation 值为 false ,否则不能在渲染器过程中使用 require()

有关更多详细信息,请参见: github.com/electron/electron/issues/23506

webPreferences API设置参考: https://www.electronjs.org/docs/api/browser-window

contextIsolation 设置的意思是 是否开启上下文隔离 ,意味着是否在独立 JavaScript 环境中运行 Electron API 和指定的 preload 脚本。关于因此导致的 上下文隔离 问题,参考: https://www.electronjs.org/docs/tutorial/context-isolation

也就是说,同时设置 nodeIntegration: true contextIsolation: false 解决该问题!

除特别注明外,本站所有文章均为原创。原创文章均已备案且受著作权保护,未经作者书面授权,请勿转载。 交流区 (2)
弗斯

找了好久,终于找到了新的解决办法。太感谢了

2021年4月14日 14:49 回复
轶哥

❤️

2021年4月15日 00:43 回复
尚未登陆
发布
尚未登陆
目录
上一篇 (Apple M1 编译原生Electron应用程序) (CentOS8卸载podman安装docker)

评论回复提醒