FS module(fs.writeFile)を使用して、ファイルにデータを書き込む必要があります。私のスタックは、webpack +反応+ redux +電子です。
最初の問題は次のとおりでした:モジュール 'fs'を解決できません。使ってみた
target: "node",
---
node: {
global: true,
fs: "empty",
}
---
resolve: {
root: path.join(__dirname),
fallback: path.join(__dirname, 'node_modules'),
modulesDirectories: ['node_modules'],
extensions: ['', '.json', '.js', '.jsx', '.scss', '.png', '.jpg', '.jpeg', '.gif']
},
数回試行した後、問題は解決されました(node:{fs: "empty"})。しかし、それから2番目の問題がありました: スクリーンショット 。
//In method componentDidMount (React)
console.log('fs', fs);
console.log('typeOf', typeof fs.writeFile);
//By clicking on the button
console.log(fs);
console.log(typeof fs.writeFile);
fsが空のオブジェクトであり、メソッドwriteFileが存在しないことがわかります。 Webpackの設定を変更しようとしました。
const path = require('path');
const fs = require('fs');
const webpack = require("webpack");
console.log(fs);
この場合、fsは空ではありません。
この問題を解決するには?何か案は?
問題は解決しました。
Electronアプリで使用する必要があります(バンドルを追加する場所):
var remote = require('electron').remote;
var electronFs = remote.require('fs');
var electronDialog = remote.dialog;
受け入れられた回答の完成。
Webpackを使用している場合。 Angularを使用している場合と同様に、Reactまたは他のフレームワークです。require
はwebpack
によって解決されます。これにより、実行時に使用がねじ込まれます。
使用する window.require
代わりに。
例:
var remote = window.require('electron').remote;
var electronFs = remote.require('fs');
var electronDialog = remote.dialog;
注:レンダラープロセスからノードAPIにアクセスするためにリモートを使用する必要はありません。完全に露出しているので。
const fs = window.require('fs');
const path = window.require('path');
しましょう。
Electronのv5から!ノードAPIは、レンダラープロセスでデフォルトで公開されなくなりました!!!
nodeIntegrationフラグのデフォルトがtrueからfalseに変更されました。
ブラウザウィンドウの作成時に有効にできます。
app.on('ready', () => {
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true, // <--- flag
nodeIntegrationInWorker: true // <--- for web workers
}
});
});
nodeIntegrationをアクティブ化することのセキュリティリスク
nodeIntegration: true
は、アプリケーションで信頼できないリモートコードを実行している場合にのみセキュリティリスクになります。たとえば、アプリケーションがサードパーティのWebページを開くとします。サードパーティのWebページはノードランタイムにアクセスでき、ユーザーのファイルシステムで悪意のあるコードを実行できるため、これはセキュリティリスクになります。その場合、nodeIntegration: false
。アプリがリモートコンテンツを表示していない場合、または信頼できるコンテンツのみを表示している場合は、nodeIntegration: true
大丈夫。
そして最後に!!!!ドキュメントからの推奨される安全な方法
https://electronjs.org/docs/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content