Typescript ReferenceError: exports is not defined

22 浏览
0 Comments

Typescript ReferenceError: exports is not defined

尝试按照官方手册实现一个模块时,我收到了以下错误信息:\n

\nUncaught ReferenceError: exports is not defined\nat app.js:2\n

\n但是在我的代码中从未使用过exports这个名称。\n我该如何解决这个问题?\n


\n

文件

\n

app.ts

\n

let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');

\n

module-1.ts

\n

 export class Person {
  constructor(){
    console.log('Person Class');
  }
}
export default Person;

\n

tsconfig.json

\n{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"es5\",\n \"noImplicitAny\": false,\n \"sourceMap\": true,\n \"outDir\": \"scripts/\"\n },\n \"exclude\": [\n \"node_modules\"\n ]\n}\n

0
0 Comments

在使用TypeScript时,有时会遇到一个错误:`ReferenceError: exports is not defined`。那么为什么会出现这个错误,以及如何解决呢?

出现这个错误的原因是在`package.json`中存在一个字段`"type": "module"`。这个字段的作用是告诉Node.js引擎使用ES6模块系统,而不是常见的CommonJS模块系统。然而,在使用Webpack打包应用程序时,我们通常使用的是CommonJS模块系统,而不是ES6模块系统。

解决这个问题的方法是从`package.json`中删除`"type": "module"`字段。这样一来,Node.js引擎将会使用CommonJS模块系统,而不会出现`ReferenceError: exports is not defined`错误。

如果你想更深入地了解这个问题,可以参考这篇文章:bobbyhadz.com/blog/…。这篇文章对这个问题进行了很好的解释。在Node.js中,你可以通过在`tsconfig.json`中将`"module"`设置为`"es6"`来生成ES6语法的代码,并且这样做是可行的。

当然,解决这个问题的方法可能因情况而异。如果你使用ESM(ECMAScript模块)包进行互操作,那么保留`"type": "module"`字段可能是必要的。你需要根据自己的具体情况来决定是否删除这个字段。

总之,当遇到`ReferenceError: exports is not defined`错误时,你可以尝试删除`package.json`中的`"type": "module"`字段,这可能会解决这个问题。

0
0 Comments

在使用TypeScript时,有时会遇到"ReferenceError: exports is not defined"这个错误。这个问题的出现是因为在浏览器环境下,没有定义exports对象。解决这个问题的方法是在其他对JavaScript的引用之前添加以下代码:


这是一个小技巧,通过定义一个空的exports对象来解决这个问题。这样一来,在浏览器环境下,就可以正常运行使用exports的代码了。

然而,这个解决方法并不是最理想的,因为我们实际上是想在Node.js环境下运行TypeScript代码。那么有没有办法让TypeScript将代码转译成Node.js可以理解的代码呢?是否真的是Node.js在抱怨呢?还是浏览器在抱怨呢?我真的很不喜欢不理解问题的实质。

希望这篇文章对你有所帮助。你可以在stackoverflow.com/questions/19059580/…找到更多关于这个的问题。

0
0 Comments

在使用TypeScript时,有时会遇到错误信息"Typescript ReferenceError: exports is not defined"。这个问题的出现是因为在tsconfig.json文件中指定了"module": "commonjs",而当前环境中没有安装CommonJS模块。

解决这个问题的方法是从tsconfig.json文件中删除"module": "commonjs"这一行。如果删除后仍然出现相同的错误信息,可以尝试安装CommonJS、SystemJS或RequireJS等模块加载器,并在tsconfig.json中指定使用的模块加载器。

需要注意的是,通过查看生成的main.js文件可以发现以下代码:

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

这是错误信息的根源,删除"module": "commonjs"后,这个错误信息将消失。

在一些特殊情况下,如目标不再是"es5"时,上述解决方法可能不适用。可以尝试将"module"的值设置为"AMD"或"System",或者使用"None"选项(如果没有指定--out-file选项)。可以在https://www.typescriptlang.org/docs/handbook/compiler-options.html中查找更多相关信息。

需要注意的是,CommonJS只是一种规范,可以在https://en.wikipedia.org/wiki/CommonJS中找到一些实现的列表。

如果目标是显示在所有浏览器中,需要将"module"设置为"commonjs"可能不会解决问题,编译后的代码仍然会显示相同的错误。可以尝试其他方法来解决这个问题。

总结起来,解决"Typescript ReferenceError: exports is not defined"问题的方法是从tsconfig.json文件中删除"module": "commonjs"这一行,并根据具体情况选择适合的模块加载器或调整编译选项。

0