- 更新: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
解决该问题!
找了好久,终于找到了新的解决办法。太感谢了
2021年4月14日 14:49 回复❤️
2021年4月15日 00:43 回复