最初はElectron Stable(4.x.x)を使用しており、ブラウザとレンダラープロセスの両方でrequire
を使用できました。新しいバージョンのノードが必要で、レンダラープロセスでこのエラーメッセージ_Uncaught ReferenceError: require is not defined
_が発生したため、electronベータ(5.0.0)にアップグレードしました。
Electronドキュメントをグーグルで調べてみると、BrowserWindow
を初期化するときに_webPreferences.nodeIntegration
_をfalseに設定するとエラーが発生する可能性があるというコメントが見つかりました。例:new BrowserWindow({width, height, webPreferences: {nodeIntegration: false}});
。しかし、私はこれをしていなかったので、何か他のことが問題であるに違いないと考え、解決策を探し続けました。
実は、nodeIntegration
は以前のelectronバージョンではデフォルトでtrueでしたが、5.0.0ではデフォルトでfalseでした。したがって、これをtrueに設定すると、問題が解決しました。コメントや電子ページにオンラインで文書化されたこの変更を見つけられなかったので、この問題に遭遇した将来の人々が見つけやすくするために、この自己回答型のSO投稿を作成すると思います。
junvar と同じように、nodeIntegration
は5.0.0ではデフォルトでfalseになりました。
electronjs FAQ には、この値を設定する方法に関するサンプルコードがあります。
let win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
win.show()
新しいブラウザウィンドウを作成するときにnodeIntegrationをtrueに設定します。
app.on('ready', () => {
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
});
});
junvar は正しいです。v5.0.0では、nodeIntegration
はデフォルトでfalseです。
これは v5.0.0のリリースノート のOther Changes
セクションの最後のステートメントであり、 this PR でも言及されています
この投稿の読者は リモートコンテンツのNode.js統合を有効にしないでください セクションの セキュリティ、ネイティブ機能、および責任ガイド 決定する前に。
// Bad
const mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
nodeIntegrationInWorker: true
}
})
mainWindow.loadURL('https://example.com')
// Good
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(app.getAppPath(), 'preload.js')
}
})
mainWindow.loadURL('https://example.com')