質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

979閲覧

Electron:Uncaught ReferenceError: require is not definedと表示される

you_19000

総合スコア31

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2019/11/02 03:15

編集2019/11/02 03:17

前提・実現したいこと

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" }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決致しました。
Main Process側でElectron.Browsewindowsを呼ぶ際に、
以下の通りnodeIntegration: trueを追加する事で解決しました。
ご確認頂いた方々、ありがとうございました。

typescript

1 this.mainWindow = new BrowserWindow({ 2 width: 800, 3 height: 400, 4 webPreferences: { 5 nodeIntegration: true, 6 } 7 });

投稿2019/11/03 03:16

you_19000

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問