[英]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更改module
到es2015
和moduleResolution
到node
。
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node"
}
}
exports.__esModule
和require('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.