Update Winkel-v6 - Modul nicht gefunden: Error: Can ' T resolve 'fs'
Ich versuche zu migrieren, meine Eckig Universal Projekt von Eckig v5 auf v6
Habe ich einen service wo ich fs
zum laden der übersetzung, die auf der server-Seite. Alles funktioniert auch mit Eckigen v5.
Mit Eckigen v6, wenn ich npm run start
aka ng serve --proxy-config proxy.conf.json
ich angesichts der folgenden Fehler
FEHLER in
./src/Anbieter/core/translate/translate-universal-Lader.service.ts
Modul nicht gefunden: Error: Can ' T resolve 'fs' in
'/Users/me/Documents/projects/myproject/src/Anbieter/core/translate'
In mein service erkläre ich fs
wie folgt:
declare var require: any;
const fs = require('fs');
Ich habe auch versucht es zu erklären wie folgende, aber nicht helfen
import * as fs from 'fs';
Sagen webpack zu ignorieren fs ich versuchte, fügen Sie Folgendes in meine webpack.server.config.js
ohne Erfolg
node: {
fs: 'empty'
}
habe auch versucht mit einem webpack plugin, war nicht erfolgreich, weder
new webpack.IgnorePlugin(/fs/)
aber eigentlich ist es vielleicht nicht die config verwenden von ng serve
aber ich weiß nicht, ob ich noch immer werfen Sie die Konfiguration mit v6?
jemand ne Idee?
UPDATE
Wenn ich erkläre fs als any
es löst das problem der ng serve
aber leider funktioniert es nicht auf der server-Seite nach npm run build:ssr
und führen npm run serve
. Auf der server-Seite werde ich dann vor der folgenden Fehler
FEHLERMELDUNG ReferenceError: fs ist nicht definiert
p.s.: mein Projekt folgt https://github.com/angular/universal-starter Struktur, Konfiguration und Abhängigkeiten
- versuchen Sie deklarieren die
fs
auchdeclare var fs: any;
- cool das ist ein netter workaround funktioniert, thx a lot @JohnVelasquez - ich lasse Sie die Frage beantworten und dann markieren Sie es als die Lösung
- versuchen Sie, diese Bedingung, wenn Sie mit
fs
->if(typeof window !== 'undefined')
- das hilft nicht, das problem auf der server-Seite, der code ist auch nur auf der server-Seite (isPlatformServer)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, nach Stunden komme ich zu dem Schluss mit den Antworten, die ich gesammelt, dass die wirkliche Antwort ist:
Können Sie nicht verwenden
fs
mehr in Eckige v6Darüber hinaus, da es nicht mehr möglich ist, entnehmen Sie die webpack-Konfiguration, es gibt keine Möglichkeit zu sagen, webpack zu ignorieren, die fs verlangen
Es ist eine offene Frage zu diesem Thema: https://github.com/angular/angular-cli/issues/10681
P. S.: ich war mit fs laden der übersetzungen auf der server-Seite, die ich überwinden das problem durch folgende Lösung von @xuhcc, siehe https://github.com/ngx-translate/core/issues/754
Für jemand, der noch auf der Suche nach einer Antwort, hier ist, wie ich es geschafft require('fs') in meinem Winkel 7 app. Oder für diese Angelegenheit, jede andere node-Modul.
Versionen
1. Installieren @Typen/node
npm install --save-dev @types/node
2. Ändern tsconfig.json
Beachten "allowSyntheticDefaultImports" - flag. Es muss auf true gesetzt sein.
3. Erforderlich fs
Hinweis: Die import-Anweisungen am Anfang der Datei sind nur für Typ-Informationen. Die Werte der Variablen werden über Knoten
require
.Für updates, Verfolgen das Thema hier
https://github.com/angular/angular-cli/issues/9827
Edit:
Stellt sich heraus, dass, wenn Ihr Projekt hat Abhängigkeiten, die
require
'fs', 'path', 'child_process'
etc. Der angular compiler nicht kompiliert den code. Um dies zu umgehen, wie jemand schon vorgeschlagen, fügen Sie(window as any).global = window;
zu Ihrem polyfills.ts.In meinem Fall hatte ich chokidar, Knoten-pty und Elektron als Abhängigkeit. Diese Arbeiter für mich.
path
undfs
. Ich habe die oben genannten Schritte, kann aber nicht scheinen, um das Problem zu beheben.TypeError: window.require is not a function
wenn Sie versuchen, zu verwendenwindow['require']
. Nicht sicher, wie dies zu umgehen, eindeclare global { interface Window { require: NodeRequire; } }
Dann, window['require']. Wenn es ein typescript-compiler Fehler, es muss gelöst werden mit dieser. Wenn das nicht funktioniert, versuchen Sie dies:window['require']=eval('require')
. Und die window['require'].require
zu verwenden. Ich werde weiter versuchen, die Sachen ausKönnen Sie erklären, die
fs
auch dadurchdeclare var fs: any;
ng serve
aber wenn ich Baue mein Projektnpm run build:ssr
und führen Sie esnpm run serve
ich die Fehlerfs is not defined
auf der dienen Seite 🙁Die akzeptierte Antwort ist richtig, Sie können es nicht verwenden
fs
mehr in Eckige v6+.Jedoch, diese alternative builder (es ist eine Erweiterung der Winkel-CLI) können Sie gezielt ein Elektron Umgebung und haben vollen Zugriff auf die Elektronen features:
https://github.com/angular-guru/electron-builder
Alternativ
In NativeScript-Datei implementiert ist als Teil der Datei-system-Modul.
Um es zu verwenden müssen Sie es importieren in Ihre code-behind-Datei.
z.B.
Offenbar advanced-json-Pfad behebt dieses Problem in Winkel-6 ab, wenn jemand mit fs
Also man hat zu tun, eine
da es ein dev-dependency (zumindest in meinem Fall)
da dieser Nachricht-Instanz, es ist version 1.0.8
Dann das Modul 'fs' nicht gefunden nicht auftreten.
In unserer Anwendung ist es losgeworden, das Modul 'fs' nicht gefunden Fehler.