Beim Versuch, ein Modul gemäß dem offiziellen Handbuch zu implementieren, erhalte ich diese Fehlermeldung:
Ungefangener ReferenceError: exports ist nicht definiert
bei app.js:2
Aber nirgendwo in meinem Code verwende ich den Namen exports
.
Wie kann ich das beheben?
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
export class Person {
constructor(){
console.log('Person Class');
}
}
export default Person;
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": true,
"outDir": "scripts/"
},
"exclude": [
"node_modules"
]
}
Einige andere Lösungen für dieses Problem
<script>var exports = {};</script>
Diese Antwort könnte nicht funktionieren, wenn Sie nicht mehr auf es5
abzielen, ich werde versuchen, die Antwort vollständiger zu machen.
Wenn CommonJS nicht installiert ist (welches exports
definiert), müssen Sie diese Zeile aus Ihrer tsconfig.json
entfernen:
"module": "commonjs",
Wie aus den Kommentaren hervorgeht, kann es sein, dass dies allein mit späteren Versionen von tsc
nicht funktioniert. Wenn das der Fall ist, können Sie einen Modul-Loader wie CommonJS, SystemJS oder RequireJS installieren und diesen dann angeben.
Schauen Sie sich Ihre main.js
-Datei an, die tsc
erzeugt hat. Sie werden dies ganz oben finden:
Object.defineProperty(exports, "__esModule", { value: true });
Das ist die Ursache der Fehlermeldung, und nach dem Entfernen von "module": "commonjs",
, wird sie verschwinden.
Ich hatte das gleiche Problem und löste es, indem "es5" Bibliothek zu tsconfig.json wie folgt:
{
"compilerOptions": {
"target": "es5", //defines what sort of code ts generates, es5 because it's what most browsers currently UNDERSTANDS.
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true, //for angular to be able to use metadata we specify in our components.
"experimentalDecorators": true, //angular needs decorators like @Component, @Injectable, etc.
"removeComments": false,
"noImplicitAny": false,
"lib": [
"es2016",
"dom",
"es5"
]
}
}