javascript - Ohanterat ReferenceError: exports är inte definierat i filen som genererats av Typescript


Jag försöker komma igång med Typescript för Electron-utveckling. Efter att ha kämpat med att få typning för node och jQuery, fick jag till slut min .ts-fil utan fel.

Problemet nu är att när jag kör min app får jag detta fel:

index.js:2 Uncaught ReferenceError: exports is not defined

Det här är de första två raderna i index.js:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

Jag vet inte vad den raden gör. Typescript lade till den när det kompilerades. Min app fungerar bra om jag tar bort den.

Hur blir jag av med detta fel?

Oh och här är min tsconfig, om det är relevant.

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "moduleResolution": "node",
        "isolatedModules": false,
        "jsx": "react",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "declaration": false,
        "noImplicitAny": false,
        "noImplicitUseStrict": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "suppressImplicitAnyIndexErrors": true
    },
    "exclude": [
        "node_modules",
        "typings/browser",
        "typings/browser.d.ts"
    ],
    "compileOnSave": true,
    "buildOnSave": false,
    "atom": {
        "rewriteTsconfig": false
    }
}

Svar #1

Jag löste det med en lösning i den inbäddade HTML-koden:

<script> var exports = {}; </script>
<script src="index.js"></script>

I princip ge det vad det vill ha, en global exports-variabel.

Med det laddas min TypeScript (2.3.2) genererade fil (es6).

Svar #2

Jag stod också inför samma problem och försökte byta till olika versioner av TypeScript, men det fungerade inte.

Slutligen, jag förstod det - Det fanns en "type": "module" i package.json

, och när jag tog bort det - fungerade det

Svar #3

Det finns ett problem med den nya versionen av TypeScript 2.2.1, försök att använda den äldre versionen 2.1.6, det löste exakt samma problem som du har åt mig.

Version 2.2.1 vid kompilering lägger till denna rad Object.defineProperty(exports, "__esModule", { value: true }); medan den äldre 2.1.6 inte gör det.

Svar #4

Jag har fixat min med följande:

tsconfig.json
{
    "compilerOptions": {
        "target": "ESNext",
        "module": "CommonJS",
        "lib": [
            "DOM",
            "ES5"
        ],
        "esModuleInterop": true
    }
}

Lägga till esModuleInterop

Ta bort "type": "module" från package.json

Relaterade artiklar