お世話になっております。
Electronで動かしていたアプリをMonaca上でも同様に動かすために、ソースコードを移行したところ、
「const { remote } = require('electron');」でエラー「Uncaught ReferenceError: require is not defined」が発生してしまいました。
ソースコードは下記のようにしております。
・Electronオリジナルソース
html
1index.html 2 3<!DOCTYPE html> 4<html lang="ja"> 5<head> 6 <meta charset="UTF-8"> 7 <meta name="viewport" 8 content="width=device-width, initial-scale=1.0"> 9 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> 10 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> 11 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script> 12 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script> 13 <title>Sample App</title> 14</head> 15<body> 16 <nav class="navbar bg-primary mb-4"> 17 <h1 class="display-4 text-light">Sample-app</h1> 18 </nav> 19 <div class="container"> 20 <p id="msg">please click button.</p> 21 <button class="btn btn-primary"onclick="doit()"> 22 Click 23 </button> 24 </div> 25 <script> 26 const { remote } = require('electron'); 27 const { BrowserWindow } = remote; 28 29 30 function doit() { 31 let win = new BrowserWindow({ 32 width: 400, 33 height: 300, 34 webPreferences: { 35 nodeIntegration: true, 36 enableRemoteModule: true 37 } 38 }); 39 win.loadFile('index.html'); 40 document.querySelector('#msg').textContent 41 = 'Create new window!'; 42 } 43 </script> 44</body> 45</html> 46
javascript
1index.js 2 3const { app, Menu, BrowserWindow } = require('electron'); 4const path = require('path'); 5 6 7function createWindow () { 8 win = new BrowserWindow({ 9 width: 400, 10 height: 300, 11 webPreferences: { 12 nodeIntegration: true, 13 enableRemoteModule: true 14 } 15 }); 16 win.loadFile('index.html'); 17} 18 19 20function createMenu() { 21 let menu_temp = [ 22 { 23 label: 'File', 24 submenu: [ 25 {label: 'New', click: ()=>{ 26 console.log('New menu.'); 27 createWindow(); 28 }}, 29 {label: 'File', click: ()=>{ 30 console.log('File menu.'); 31 createWindow(); 32 }}, 33 {role: 'close'}, 34 {type: 'separator'}, 35 {role: 'quit'} 36 ] 37 }, 38 {role: 'editMenu'}, 39 {role: 'viewMenu'}, 40 {role:'windowMenu'}, 41 {label: 'Help', submenu: [ 42 {role: 'about'}, 43 {type: 'separator'}, 44 {role: 'reload'}, 45 {role: 'zoomIn'}, 46 {role: 'zoomOut'} 47 ]} 48 ]; 49 let menu = Menu.buildFromTemplate(menu_temp); 50 51 Menu.setApplicationMenu(menu); 52} 53 54 55createMenu(); 56app.whenReady().then(createWindow); 57
・Monaca移行用プログラム(テンプレートは「最小限のテンプレート」を使用しております。)
html
1index.html 2<!DOCTYPE HTML> 3<html> 4<head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 7 <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: content: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> 8 <script src="components/loader.js"></script> 9 <link rel="stylesheet" href="components/loader.css"> 10 <link rel="stylesheet" href="css/style.css"> 11 12 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> 13 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> 14 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script> 15 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script> 16</head> 17<body> 18 <nav class="navbar bg-primary mb-4"> 19 <h1 class="display-4 text-light">Sample-app</h1> 20 </nav> 21 <div class="container"> 22 <p id="msg">please click button.</p> 23 <button class="btn btn-primary"onclick="doit()"> 24 Click 25 </button> 26 </div> 27 <script> 28 const { remote } = require('electron'); 29 const { BrowserWindow } = remote; 30 31 32 function doit() { 33 let win = new BrowserWindow({ 34 width: 400, 35 height: 300, 36 webPreferences: { 37 nodeIntegration: true, 38 enableRemoteModule: true 39 } 40 }); 41 win.loadFile('index.html'); 42 document.querySelector('#msg').textContent 43 = 'Create new window!'; 44 } 45 </script> 46</body> 47</html> 48
javascript
1index.js 2 3const { app, Menu, BrowserWindow } = require('electron'); 4const path = require('path'); 5 6 7function createWindow () { 8 win = new BrowserWindow({ 9 width: 400, 10 height: 300, 11 webPreferences: { 12 nodeIntegration: true, 13 enableRemoteModule: true 14 } 15 }); 16 win.loadFile('index.html'); 17} 18 19 20function createMenu() { 21 let menu_temp = [ 22 { 23 label: 'File', 24 submenu: [ 25 {label: 'New', click: ()=>{ 26 console.log('New menu.'); 27 createWindow(); 28 }}, 29 {label: 'File', click: ()=>{ 30 console.log('File menu.'); 31 createWindow(); 32 }}, 33 {role: 'close'}, 34 {type: 'separator'}, 35 {role: 'quit'} 36 ] 37 }, 38 {role: 'editMenu'}, 39 {role: 'viewMenu'}, 40 {role:'windowMenu'}, 41 {label: 'Help', submenu: [ 42 {role: 'about'}, 43 {type: 'separator'}, 44 {role: 'reload'}, 45 {role: 'zoomIn'}, 46 {role: 'zoomOut'} 47 ]} 48 ]; 49 let menu = Menu.buildFromTemplate(menu_temp); 50 51 Menu.setApplicationMenu(menu); 52} 53 54 55createMenu(); 56app.whenReady().then(createWindow); 57
起動はMonaca Localkitのプレビュー表示で起動しており、正確なエラーメッセージは下記になります。
Uncaught ReferenceError: require is not defined
at index.html:27
また、このままの状態でボタンを押すと、下記エラーも追加されます。
Uncaught ReferenceError: BrowserWindow is not defined
at doit (index.html:32)
at HTMLButtonElement.onclick (index.html:22)
気がついた点としては、MonacaのElectronのサンプルアプリケーション「Electron TODO App」「Electron 最小限のテンプレート」は、「 require('electron');」をしている箇所がないため、何か根本的に間違えているような気はしております。
何がおかしいのか、ご指摘いただけると助かります。
以上、よろしくお願いします。
あなたの回答
tips
プレビュー