前提・実現したいこと
Electronでデスクトップアプリを作ろうとしています。
単純な画面の起動は成功したのですが、以下のような事をやろうとすると、
Errorが発生してしまい実現に至っていません。
すみませんが解決策がありましたら教えて頂けないでしょうか。
発生している問題・エラーメッセージ
Uncaught ReferenceError: require is not defined
RendererProcessでHTML側でButtonを押したらMainProcess側と通信を行い、
データを取得して表示をする、という事を作り方かったのですが、
ElectronのipcRendererをコードに記載すると上記Errorが出てしまい実行出来ませんでした。
ブラウザなのにrequireがあるのでErrorを吐いていると思っているので、
WebPack側の設定の問題のような気はしているのですが、ググり切れませんでした。
該当のソースコード
MainProcess
Typescript
1import * as Electron from "electron"; 2import { req, ClassDB } from "../module/index"; 3import * as path from "path"; 4 5let mainWindow: Electron.BrowserWindow | null = null; 6 7Electron.app.on("ready", () => { 8 mainWindow = new Electron.BrowserWindow({ height: 800, width: 1000, minWidth: 1000, autoHideMenuBar: true, center: true }); 9 mainWindow.loadURL("file://" + path.join(__dirname, "html", "index.html")); 10 mainWindow.on("close", () => { 11 mainWindow = null; 12 }) 13}); 14 15Electron.ipcMain.on("updateButton", (async (event: Electron.IpcMainEvent) => { 16 const url: string = "********"; 17 const mainDb = new ClassDB(); 18 await mainDb.loadDatabase(); 19 const res = await req.get(url); 20 await mainDb.deleteData({}); 21 await mainDb.addData(res); 22 const data = await mainDb.findData({}); 23 const str: string = data.join(""); 24 event.returnValue(str); 25})); 26 27
RendererProcess
Typescript
1import { ipcRenderer } from "electron"; 2window.document.getElementById("updateButton")!.onclick = (() => { 3 const value = ipcRenderer.sendSync("updateButton"); 4 console.log(value); 5});
webpack.config.ts
Webpack
1import * as webpack from "webpack"; 2import * as path from "path"; 3 4const main: webpack.Configuration = { 5 mode: "development", 6 target: "electron-main", 7 entry: path.join(__dirname, "src", "app", "app"), 8 output: { 9 filename: "app.js", 10 path: path.resolve(__dirname, "dist") 11 }, 12 node: { 13 __dirname: false, 14 __filename: false 15 }, 16 module: { 17 rules: [{ 18 test: /.ts?$/, 19 include: [path.resolve(__dirname, "src")], 20 exclude: [path.resolve(__dirname, "node_modules")], 21 loader: "ts-loader", 22 }] 23 }, 24 resolve: { extensions: [".js", ".ts"] }, 25}; 26 27const renderer: webpack.Configuration = { 28 mode: "development", 29 target: "electron-renderer", 30 entry: path.join(__dirname, "src", "renderer", "index"), 31 output: { 32 filename: "index.js", 33 path: path.resolve(__dirname, "dist") 34 }, 35 resolve: { extensions: [".json", ".js", ".jsx", ".css", ".ts", ".tsx"] }, 36 module: { 37 rules: [{ 38 test: /.(tsx|ts)$/, 39 use: ["ts-loader"], 40 include: [ 41 path.resolve(__dirname, "src"), 42 path.resolve(__dirname, "node_modules"), 43 ], 44 }, { 45 test: /.html?$/, 46 loader: "html-loader", 47 }, { 48 test: /.css?$/, 49 loader: "css-loader" 50 }] 51 }, 52}; 53 54module.exports = [main, renderer];
補足情報
現在の環境でインストールしているModuleは以下の通りです。
"devDependencies": { "@types/nedb": "^1.8.9", "@types/request": "^2.48.3", "@types/webpack": "^4.39.7", "electron": "^7.0.0", "electron-packager": "^14.1.0", "nedb": "^1.8.0", "request": "^2.88.0", "ts-loader": "^6.2.1", "ts-node": "^8.4.1", "typescript": "^3.6.4", "webpack": "^4.41.2", "webpack-cli": "^3.3.10" }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。