Для тех, кто все еще ищет ответ, вот как мне удалось потребовать ('fs') в моем приложении angular 7. Или, если на то пошло, любой другой узел модуля.
Версия
Angular CLI: 7.0.4
Node: 10.13.0
OS: win32 x64
"@angular/animations": "~7.0.0",
"@angular/common": "~7.0.0",
"@angular/compiler": "~7.0.0",
"@angular/core": "~7.0.0",
"@angular/forms": "~7.0.0",
"@angular/http": "~7.0.0",
"@angular/platform-browser": "~7.0.0",
"@angular/platform-browser-dynamic": "~7.0.0",
"@angular/router": "~7.0.0",
"@angular-devkit/build-angular": "~0.10.0",
"@angular/cli": "~7.0.4",
"@angular/compiler-cli": "~7.0.0",
"@angular/language-service": "~7.0.0",
"electron": "^3.0.7",
"typescript": "~3.1.1"
1. Установить @ types / node
npm install --save-dev @types/node
2. Изменить tsconfig.json
Обратите внимание на флаг «allowSyntheticDefaultImports». Должно быть установлено значение true.
{
"compileOnSave": false,
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "es2015",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"types": [
"node"
],
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
],
"strict": false
}
}
3. Требуется фс
import { Component } from '@angular/core';
import { } from 'electron';
import Fs from 'fs';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
constructor() {
//check if platform is electron
let isElectron: boolean = window && window['process'] && window['process'].type;
if (isElectron) {
let fs: typeof Fs = window['require']('fs');
let app: Electron.App = window['require']('electron').remote;
console.log(fs, app, window['process']);
}
}
}
Примечание : операторы импорта в верхней части файла предназначены только для информации о типе. Значения переменных задаются с помощью узла require
.
Для обновлений, отследите проблему здесь
https://github.com/angular/angular-cli/issues/9827
Edit:
Оказывается, что если у вашего проекта есть зависимости, которые require
'fs', 'path', 'child_process'
и т. Д. Угловой компилятор не может скомпилировать код. Чтобы обойти это, как кто-то уже предложил, добавьте (window as any).global = window;
в ваши polyfills.ts.
В моем случае у меня были chokidar , node-pty и электрон в качестве зависимости. Этот рабочий для меня.