typescript - Échec de la requête du module interne Electron Angular2(angular-cli)


Je ne peux pas require un module interne dans mon processus de rendu. Quand je veux require un module interne de Node ou même Electron, j'obtiens une erreur ou undefined ou un objet vide.

par exemple :

import * as fs from 'fs';
console.log(fs) // empty object

import { spawn } from 'child_process'; // Can't find child_process module

import * as electron from 'electron' // fs.readFileSync is not a function

Voici mon code : Electron

import { app, BrowserWindow } from 'electron';
let mainWin = null;
const loadURL = `http://localhost:4200`;
const createWindow = () => {
    mainWin = new BrowserWindow({
        width: 800,
        height: 800
    });
    mainWin.loadURL(loadURL);
    mainWin.on('closed', () => {
        mainWin = null;
    });
}
app.on('ready', createWindow);
app.on('activate', () => {
    if (!mainWin) {
        createWindow();
    }
});

Et code Angular du processus de rendu :

import { Component } from '@angular/core';
import { readdirSync } from 'fs';
import { spawn } from 'child_process';
console.log(readdirSync);
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.styl']
})
export class AppComponent {
  constructor() {}
}

Qu'est-ce que je fais de mal ?

Réponse #1

Vous incluez des modules côté serveur dans Angular, qui est pour le navigateur.

Electron nécessite NodeJS, le navigateur ne peut pas accéder au système de fichiers, seul le serveur peut le faire.

Mais Electron rend le fichier index.html en utilisant node, donc vous pouvez require electron via le fichier index.html

Un exemple utilisant des parties d'Electron dans votre application Angular.

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Angular App</title>
  <base href="./">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">


</head>
<body>
  <app-root></app-root>


  <script>
    window.electron = require("electron");
    window.ipcRenderer = require("electron").ipcRenderer;
    window.electronRemote = require("electron").remote;
  </script>


</body>
</html>