Electron 12+ 出现 require is not defined 报错解决
source link: https://www.wyr.me/post/680
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
在 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
解决该问题!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK