如何在 React、ES6、Electron 应用程序上使用原生节点module?

IT技术 reactjs webpack babeljs electron
2021-05-14 13:07:02

我有一个 React、Electron 应用程序,我希望能够从编译的 ES6 中访问本机节点module(使用 Babel 和 Webpack)。

例如,当我尝试要求“fs”节点module访问文件系统时,我收到以下错误。

ERROR in ./src/app.js Module not found: Error: Cannot resolve module 'fs' in C:\Users\Propietario-1\Documents\GitHub\AMPLI @ ./src/app.js 1:358-371

但是当我从“未编译”的 js 文件中需要它时,它就可以工作了。我可以访问“fs”module。

任何帮助表示赞赏。

更新(2016-08-28):

我最终需要在fs调用捆绑脚本的 index.html 上的脚本标记中使用module。有用!

<script>
const fs = require('fs');

require('bundle.js');
</script>

执行此操作后,该fs变量成为可用于bundle.js. 只要确保编辑你的 linter 选项以避免覆盖它或undef错误。

2个回答

Electron 作为两个进程运行:主节点进程和渲染器进程,有点像传统的 Web 浏览器客户端和服务器关系。渲染器进程不能使用不适合浏览器的节点module(例如fs),因为它基本上是一个浏览器。

提供了两种方法来在渲染器进程和主进程之间进行通信:ipcRendererremote. 对于简单的任务,远程更容易。要使用fswebpacked react 项目中module,请在渲染器进程中:

var fs = require('electron').remote.require('fs');

我最终需要在fs调用捆绑脚本的 index.html 上的脚本标记中使用module。有用!

<script>
const fs = require('fs');

require('bundle.js');
</script>

完成此操作后fsbundle.js. 只要确保编辑你的 linter 选项以避免覆盖它或undef错误。