如何在angular-cli中使用带有electron-js的文件系统(fs)

时间:2017-03-21 15:55:30

标签: node.js electron angular-cli

我已经设置了一个angular-cli项目

(@ Angular / cli:1.0.0-rc.2 node:6.10.0 os:linux x64)

用电子js(v1.6.2) 我需要使用文件系统来创建/删除.csv文件和文件夹,但我不能在角度组件中包含

如何配置angular-cli能够:从'fs'导入fs?

2 个答案:

答案 0 :(得分:5)

您不会将Angular-CLI配置为使用NodeJS fs模块。

在电子中你有两个过程;主要和渲染器。主进程控制诸如browserWindow之类的项目,它本质上是用户在打开应用程序时看到的“窗口”,反过来又会加载视图的html文件。在此过程中,您将导入fs模块。

在渲染过程中,您将处理视图中的操作,并将它们发送到主进程。在这里,您可以使用IPC通过事件进行通信,以便与主进程进行某些操作。触发该事件后,渲染过程将获取事件并将其发送到main。 Main会对它做些什么,并在桌面上打开一个文件。

我建议使用电子API demo application来查看明确的示例。以下是使用FS(来自演示应用程序)打印到pdf的示例。

此外,这里是Ray Villalobos使用React编写的电子application github示例,它有一些类似的概念,将向您展示如何在您的应用中集成组件。

渲染过程:

const ipc = require('electron').ipcRenderer

const printPDFBtn = document.getElementById('print-pdf')

printPDFBtn.addEventListener('click', function (event) {
  ipc.send('print-to-pdf')
})

ipc.on('wrote-pdf', function (event, path) {
  const message = `Wrote PDF to: ${path}`
  document.getElementById('pdf-path').innerHTML = message
})

主要流程:

const fs = require('fs')
const os = require('os')
const path = require('path')
const electron = require('electron')
const BrowserWindow = electron.BrowserWindow
const ipc = electron.ipcMain
const shell = electron.shell

ipc.on('print-to-pdf', function (event) {
  const pdfPath = path.join(os.tmpdir(), 'print.pdf')
  const win = BrowserWindow.fromWebContents(event.sender)
  // Use default printing options
  win.webContents.printToPDF({}, function (error, data) {
    if (error) throw error
    fs.writeFile(pdfPath, data, function (error) {
      if (error) {
        throw error
      }
      shell.openExternal('file://' + pdfPath)
      event.sender.send('wrote-pdf', pdfPath)
    })
  })
})

答案 1 :(得分:1)

您可以尝试在组件中使用const fs = (<any>window).require("fs");,或者更好的是,创建一个service.ts提供程序来处理I / O操作。