繁体   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