使用Electron访问Angular 2应用程序中的文件系统

Kev*_*vin 8 fs node.js electron angular

我知道Angular 2是在Web浏览器上运行的,它无法访问文件系统.

但是,我使用Electron作为我的前端,并通过电子运行应用程序:

"build-electron": "ng build --base-href . && cp src/electron/* dist",
"electron": "npm run build-electron && electron dist"
Run Code Online (Sandbox Code Playgroud)

因此,我运行它npm run electron在最后运行electron dist.

因为我正在运行electron而不是ng我认为我应该能够访问文件系统.但是,当我这样做时:

import * as fs from 'fs'

我收到一个错误:

ng:///AppModule/AppComponent_Host.ngfactory.js:5 ERROR TypeError: __WEBPACK_IMPORTED_MODULE_0_fs__.readFileSync is not a function(…)

同样,当我尝试: var fs = require('fs');

我明白了:

ng:///AppModule/AppComponent_Host.ngfactory.js:5 ERROR TypeError: fs.readFileSync is not a function

这是导致错误的调用:

this.config = ini.parse(fs.readFileSync('../../CONFIG.ini', 'utf-8'))

有谁知道是什么导致了这个?

谢谢.

Kev*_*vin 7

解决方法:

1)弹出webpack: ng eject

2)添加target: 'electron-renderer'module.exports数组里面webpack.config.js

3)需要远程,因为我们位于中renderer,但fs仅在main process阅读更多)中可用:var remote = require('electron').remote;

4)Require fs(这次使用require的远程实现): var fs = remote.require('fs');

现在就可以了!

  • 如果您使用的是[ngx-electron软件包](https://github.com/ThorstenHans/ngx-electron),则可以跳过步骤1-3,而只需通过ElectronService.Remote.require()函数就可以了 (4认同)