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>
