通过电子应用程序执行工作目录列表(angular5)

时间:2018-05-29 16:05:41

标签: webpack angular5 fs

我正在尝试构建一个在工作目录上执行简单目录列表的本机应用程序。从我读到的内容到现在,您可以导入节点fs模块进行此类操作。

fs无法直接访问。

到目前为止,我所做的是:

ng eject以便我可以手动编辑webpack。

然而,我无法真正找到下一步。我试过添加:

module.exports = {
  "externals": {
      "fs": "require('fs')"
  },

但我仍然得到:ERROR in src/app/app.component.ts(2,21): error TS2307: Cannot find module 'fs'

运行时:webpack

2 个答案:

答案 0 :(得分:0)

如果你想在渲染器一侧获得列表,你需要使用远程模块,不需要在webpack中包含fs,只需这样做:

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

否则,您可以使用ipc频道将所需的文件夹发送到将要执行搜索的主进程,并且列出的文件将被定向回渲染器进程。像这样:

ipcMain.on("listDir", (event,folder) => fs.readdir(folder, ...))

答案 1 :(得分:0)

不幸的是,require()在构建期间角度组件上不可用。

它失败并显示消息:

  

src / app / app.component.ts(5,12)中的错误:错误TS2304:找不到名称'要求'

如果我使用它:import * as fs from 'fs';。我遇到了构建错误:

  

src / app / app.component.ts(5,21)中的错误:错误TS2307:找不到模块' fs'

如果我使用import { remote } from 'electron';import { ipcRenderer } from 'electron';我收到运行时错误(当我尝试引用代码中的任何一个时):

  

fs.existsSync不是一个函数       在Object.<anonymous>

用于访问angular5 / 6(未经任何修改)的fs的解决方案正在使用:

const fs = (<any>window).require("fs");

如果有人使用ipcRenderer,以下情况也适用。

const electron = (<any>window).require(electron);
electron.ipcRenderer.send(...)