Resmi el kitabını]1 izleyerek bir modül uygulamaya çalıştığımda bu hata mesajını alıyorum:
Yakalanmamış ReferenceError: exports tanımlanmamış
at app.js:2
Ancak kodumun hiçbir yerinde exports
adını kullanmıyorum.
Bunu nasıl düzeltebilirim?
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"
]
}
Bu sorun için diğer birkaç Çözüm
<script>var exports = {};</script>
Bu cevap artık `es5'i hedeflemediğinize bağlı olarak işe yaramayabilir, cevabı daha eksiksiz hale getirmeye çalışacağım.
Eğer CommonJS yüklü değilse (ki exports
tanımlar), bu satırı tsconfig.json
dosyanızdan kaldırmanız gerekir:
"module": "commonjs",
Yorumlara göre, bu tek başına tsc
nin sonraki sürümleriyle çalışmayabilir. Bu durumda CommonJS, SystemJS veya RequireJS gibi bir modül yükleyici yükleyebilir ve ardından bunu belirtebilirsiniz.
tscnin oluşturduğu
main.js` dosyanıza bakın. Bunu en üstte bulacaksınız:
Object.defineProperty(exports, "__esModule", { value: true });
Bu hata mesajının köküdür ve "module": "commonjs",
kaldırıldıktan sonra ortadan kalkacaktır.
Ben de aynı sorunu yaşadım ve tsconfig.json'a "es5" kütüphanesini şu şekilde ekleyerek çözdüm:
{
"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"
]
}
}