Beim Versuch, ein Modul gemäß dem offiziellen Handbuch zu implementieren, wird folgende Fehlermeldung angezeigt:
Nicht erfasster Referenzfehler: Exporte sind nicht definiert
bei app.js: 2
Aber nirgends in meinem Code verwende ich jemals den Namen exports
.
Wie kann ich das beheben?
Dateien
app.ts
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
Modul-1.t
export class Person {
constructor(){
console.log('Person Class');
}
}
export default Person;
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": true,
"outDir": "scripts/"
},
"exclude": [
"node_modules"
]
}
typescript
module
George C.
quelle
quelle
exports
mit einem s am Ende statt mitexport
getippt haben? Das würde die Fehlermeldung erklären, da mit s falsch ist.Antworten:
BEARBEITEN:
Diese Antwort funktioniert möglicherweise nicht, je nachdem, ob Sie nicht
es5
mehr zielen . Ich werde versuchen, die Antwort vollständiger zu gestalten.Ursprüngliche Antwort
Wenn CommonJS nicht installiert ist ( was definiert
exports
), müssen Sie diese Zeile aus Ihrem entfernentsconfig.json
:Gemäß den Kommentaren funktioniert dies möglicherweise nicht mit späteren Versionen von
tsc
. In diesem Fall können Sie einen Modullader wie CommonJS, SystemJS oder RequireJS installieren und diesen dann angeben.Hinweis:
Sehen Sie sich Ihre generierte
main.js
Datei antsc
. Sie finden dies ganz oben:Es ist die Wurzel der Fehlermeldung und nach dem Entfernen
"module": "commonjs",
verschwindet sie.quelle
"module": "commonJs",
Nur wenige andere Lösungen für dieses Problem
quelle
npm install @babel/plugin-transform-modules-commonjs
und zu .babelrc Plugins hinzufügen löste meine Frage.
quelle
Meine Lösung ist eine Zusammenfassung von allem oben mit kleinen Tricks, die ich hinzugefügt habe. Im Grunde habe ich dies meinem HTML-Code hinzugefügt
Dies ermöglicht es Ihnen sogar,
import
anstatt zu verwenden,require
ob Sie ein Elektron oder etwas anderes verwenden, und es funktioniert gut mit Typoskript 3.5.1, Ziel: es3 -> esnext.quelle
app.js:3 Uncaught ReferenceError: require is not defined
Ich habe das Problem gelöst, indem ich das
"type": "module"
Feld aus entfernt habepackage.json
.quelle
Ich hatte das gleiche Problem und löste es wie folgt, indem ich tsconfig.json die Bibliothek " es5 " hinzufügte:
quelle
Wenn Ihr Compiler-Ziel auf ES6 festgelegt ist, müssen Sie babel anweisen, die Modultransformation zu überspringen. Fügen Sie dies dazu Ihrer
.babelrc
Datei hinzuquelle
<script>
Tag enthalten. Ich hatte gehofft, das Modul zusammen mit älterem Code zu verwenden, und es scheint, dass dies nicht möglich ist. Dies ermöglicht mir zumindest, ES6 zu verwenden und mich später mit dem Export zu befassen.plugins
Dies wird behoben, indem die
module
Compileroption auf Folgendes gesetzt wirdes6
:quelle
Ich hatte den gleichen Fehler auch. In meinem Fall lag es daran, dass wir in unserem TypeScript AngularJS-Projekt eine altmodische Importanweisung wie folgt hatten:
welches wie folgt zu JavaScript kompiliert wurde:
Dies wurde früher benötigt, weil wir es dann
IAttributes
im Code verwendet haben und TypeScript sonst nicht gewusst hätte, was damit zu tun ist. Aber nachdem die import-Anweisung entfernt undIAttributes
inng.IAttributes
diese beiden JavaScript-Zeilen konvertiert wurde , verschwand sie - und auch die Fehlermeldung.quelle
Fügen Sie einfach
libraryTarget: 'umd'
so hinzuquelle
Für mich war das Entfernen
"esModuleInterop": true
aus tsconfig.json der Trick.quelle
Für einige ASP.NET-Projekte
import
undexport
möglicherweise überhaupt nicht in Ihren Typoskripten verwendet.Der Fehler der Frage wurde angezeigt, als ich dies versuchte, und ich stellte erst später fest, dass ich das generierte JS-Skript nur folgendermaßen zur Ansicht hinzufügen musste :
quelle
Versuchen Sie, was @iFreilicht oben vorgeschlagen hat. Wenn dies nach der Installation von Webpack und allem nicht funktioniert hat, haben Sie möglicherweise gerade eine Webpack-Konfiguration von irgendwo online kopiert und dort so konfiguriert, dass die Ausgabe versehentlich CommonJS unterstützt. Stellen Sie sicher, dass dies nicht der Fall ist in
webpack.config.js
:quelle
Hatte das gleiche Problem und behebt es durch Ändern der Ladereihenfolge der JS-Pakete.
Überprüfen Sie die Reihenfolge, in der die benötigten Pakete aufgerufen werden, und laden Sie sie in einer geeigneten Reihenfolge.
In meinem speziellen Fall (ohne Modulbündler) musste ich
Redux
dannRedux Thunk
dann ladenReact Redux
.React Redux
Vorher zu ladenRedux Thunk
würde mir gebenexports is not defined
.quelle
Hinweis: Dies gilt möglicherweise nicht für die Antwort von OP, aber ich habe diesen Fehler erhalten und so habe ich ihn gelöst.
Das Problem, mit dem ich konfrontiert war, war, dass ich diesen Fehler bekam, als ich eine 'js'-Bibliothek von einem bestimmten CDN abrief.
Das einzig Falsche, was ich tat, war das Importieren aus dem CDN-
cjs
Verzeichnis wie folgt:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/cjs/popper.min.js
Beachten Sie das
dist/cjs
Teil? Dort war das Problem.Ich ging in meinem Fall zum CDN (jsdelivr) zurück und navigierte, um den
umd
Ordner zu finden . Und ich konnte einen anderen Satz finden, vonpopper.min.js
dem die richtige Datei zum Importieren war :https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js
.quelle
quelle
Ich hatte das gleiche Problem, aber mein Setup erforderte eine andere Lösung.
Ich benutze die
create-react-app-rewired
Paket mit einerconfig-overrides.js
Datei. Zuvor habe ich denaddBabelPresets
Import (in deroverride()
Methode) von verwendetcustomize-cra
und beschlossen, diese Voreinstellungen in eine separate Datei zu abstrahieren. Zufälligerweise löste dies mein Problem.Ich
useBabelRc()
habe dieoverride()
Methode in hinzugefügtconfig-overrides.js
und einebabel.config.js
Datei mit den folgenden erstellt:quelle