Выполните распечатку рабочего каталога через электронное приложение (angular5) - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь создать собственное приложение, которое выполняет простую распечатку каталога в рабочем каталоге.Из того, что я читал до сих пор, вы можете импортировать модуль узла fs для таких операций.

Но fs не доступен напрямую.

То, что я сделал до сих пор, это:

ng eject, чтобы я мог вручную редактировать веб-пакет.

Однако я не могу найти следующий шаг.Я попытался добавить:

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

, но я все еще получаю: ERROR in src/app/app.component.ts(2,21): error TS2307: Cannot find module 'fs'

при запуске: webpack

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

К сожалению, require() недоступно для угловых компонентов во время сборки.

Сбой при сообщении:

ОШИБКА в src / app / app.component.ts (5,12): ошибка TS2304: Невозможно найти имя 'require'

Если я использую это: 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>

Решение для доступа к fs в обоих angular5 / 6 (без каких-либо изменений) использует это:

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

Следующее также работает в случае, если кто-тодолжен был использовать ipcRenderer.

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

0 голосов
/ 29 мая 2018

Если вы хотите получить список на стороне рендерера, вам нужно использовать удаленный модуль, не нужно включать fs в веб-пакете, просто выполните:

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

В противном случае вы можете использовать канал ipc для отправки нужной папки восновной процесс, в котором будет выполняться поиск и перечисленные файлы будут направлены обратно в процесс рендеринга.Вот так:

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