簡體   English   中英

未捕獲的 ReferenceError:在 Typescript 生成的文件中未定義導出

[英]Uncaught ReferenceError: exports is not defined in filed generated by Typescript

我正在嘗試開始使用 Typescript 進行電子開發。 在為 node 和 jquery 打字苦苦掙扎之后,我終於擺脫了我的 .ts 文件錯誤。

現在的問題是,當我運行我的應用程序時,出現此錯誤:

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

這些是 index.js 中的前兩行:

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

我不知道那條線可以。 打字稿在編譯時添加了它。 如果我刪除它,我的應用程序運行良好。

我如何擺脫這個錯誤?

哦,這是我的 tsconfig,如果相關的話。

{
    "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
    }
}

我通過嵌入 HTML 中的 hack 解決了它:

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

基本上給它想要的東西,一個全局導出變量。

這樣我的 TypeScript (2.3.2) 生成的文件 (es6) 就會加載。

我也面臨同樣的問題,並嘗試使用不同版本的打字稿,但沒有奏效。

終於我明白了 - 有一個"type": "module" ,當我刪除它時 - 它起作用了

新版本的 typescript 2.2.1 存在問題,請嘗試使用舊版本 2.1.6,它解決了您為我遇到的完全相同的問題。

2.2.1 版編譯添加了這一行Object.defineProperty(exports, "__esModule", { value: true }); 而較舊的 2.1.6 則沒有。

我已經用以下方法修復了我的:

tsconfig.json

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

添加 esModuleInterop

從 package.json 中刪除 "type": "module"

我對 Typescript 編譯器生成的 js 文件有同樣的問題。 同一行:

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

同樣的錯誤:

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

我在這個文件中定義了一個游戲類。 我通過在我的 game.ts 文件末尾添加這個來解決這個問題:

export = Game;

有了這個,Typescript 編譯器替換了:

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

和:

module.exports = Game;

在這之后,我再也沒有錯誤了。

tsconfig.json更改modulees2015moduleResolutionnode

{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "moduleResolution": "node"
  }
}

取自這個答案

exports.__esModulerequire('lib')是我們從 ES 模塊轉換為 commonjs (使用 babel 或使用 TypeScript)時發生的情況。

我遇到了同樣的問題,我只是修改了systemjs.config.js文件,如下所述

'npm:': '/node_modules/' -- //它的值只是 'node_modules/' 我在開頭加了 '/'

'app': '/src/app' -- //它的值只是 'app' 並且因為我的應用程序文件夾路徑不同所以相應地改變它

loader: '/src/systemjs-angular-loader.js' -- //它的值只是 'systemjs-angular-loader.js' 並且因為它在我的項目中的位置不同所以指向正確的路徑

解決方案

配置文件

"module": "ESNext",

"target": "ESNext",

索引.html

<script type="module" src="script.js"></script>

快速解決

"target": "es6"更改為"target": "es5"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM