如何在React,ES6,Electron App上使用Native Node Modules?

iva*_*ero 4 reactjs webpack babeljs electron

我有一个React,Electron应用程序,我希望能够从ES6编译(使用Babel和Webpack)访问本机节点模块.

例如,当我尝试要求"fs"节点模块访问文件系统时,我收到以下错误.

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
Run Code Online (Sandbox Code Playgroud)

但是,当我从"无编译"的js文件中需要它时,它可以工作.我可以访问"fs"模块.

任何帮助表示赞赏.

更新(2016-08-28):

我最终要求fsindex.html上的脚本标签中的模块调用捆绑的脚本.有用!

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

require('bundle.js');
</script>
Run Code Online (Sandbox Code Playgroud)

执行此操作后,它将fs成为可用于所有脚本的全局变量bundle.js.只需确保编辑您的linter选项以避免覆盖它或undef错误.

mcc*_*anp 6

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

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

var fs = require('electron').remote.require('fs');
Run Code Online (Sandbox Code Playgroud)

  • @mccleanp 你拯救了我的理智!!我一直试图让 `odbc` 在一个 Electron 应用程序中工作 3 天。我打开了大约 100 个浏览器选项卡,这是我第一次听说“远程”。它有效。辉煌。查看您的个人资料,这是您在 StackOverflow 上的唯一答案。好吧,我只想说谢谢你花时间回答这个问题。你让我免于失去理智。:) (2认同)