Når jeg prøver å implementere en modul i henhold til den offisielle håndboken, får jeg denne feilmeldingen:
Uncaught ReferenceError: exports er ikke definert
at app.js:2
Men ingen steder i koden min bruker jeg navnet exports
.
Hvordan kan jeg fikse dette?
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"
]
}
Noen få andre løsninger på dette problemet
<script>var exports = {};</script>
Dette svaret fungerer kanskje ikke avhengig av om du ikke er rettet mot es5
lenger, jeg skal prøve å gjøre svaret mer komplett.
Hvis CommonJS ikke er installert (som definerer exports
), må du fjerne denne linjen fra tsconfig.json
:
"module": "commonjs",
I henhold til kommentarene er det ikke sikkert at dette alene fungerer med senere versjoner av tsc
. Hvis det er tilfelle, kan du installere en modullaster som CommonJS, SystemJS eller RequireJS og deretter spesifisere den.
Se på main.js
-filen som tsc
genererte. Du finner denne helt øverst:
Object.defineProperty(exports, "__esModule", { value: true });
Det er roten til feilmeldingen, og etter å ha fjernet "module": "commonjs",
vil den forsvinne.
Jeg hadde det samme problemet og løste det ved å legge til "es5" bibliotek i tsconfig.json slik:
{
"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"
]
}
}