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

时间:2016-08-27 15:39:51

标签: 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

但是当我从'#34;无编译" js文件它的工作原理。我可以访问" fs"模块。

感谢任何帮助。

更新(2016-08-28):

我最终要求index.html上的脚本标记中的fs模块调用捆绑的脚本。它有效!

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

我最终要求index.html上的脚本标记中的fs模块调用捆绑的脚本。它有效!

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

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

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