尝试按照官方手册实现一个模块,我得到这个错误消息:

Uncaught ReferenceError:未定义exports 在app.js: 2

但在我的代码中,我从未使用过名称exports。

我该如何解决这个问题?


文件

app.ts

let a = 2;
let b:number = 3;

import Person = require ('./mods/module-1');

模块- 1. t

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

tsconfig.json

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

当前回答

我遇到了同样的问题,但我的设置需要不同的解决方案。

我使用的是带有config-override .js文件的create-react-app-rewired包。以前,我从customize-cra中使用addBabelPresets导入(在override()方法中),并决定将这些预置抽象到一个单独的文件。巧合的是,这解决了我的问题。

我在config-override .js的override()方法中添加了useBabelRc(),并创建了一个babel.config.js文件,内容如下:

module.exports = {
    presets: [
        '@babel/preset-react',
        '@babel/preset-env'
    ],
}

其他回答

对我来说,从tsconfig中删除“esModuleInterop”:true。Json成功了。

在其他JavaScript引用之前添加以下行。这是一个不错的小hack。

<script>var exports = {};</script>

有同样的问题,并通过改变JS包的加载顺序来修复它。

检查调用所需包的顺序,并按适当的顺序加载它们。

在我的特定情况下(不使用模块绑定器),我需要加载Redux,然后Redux坦克,然后React Redux。在Redux坦克之前加载React Redux会给我出口是没有定义的。

没有直接回答这个问题,但是没有stackoverflow线程提到这种情况,我花了一段时间来调试,所以在这里添加它,以防将来它可以帮助别人。

我有错误“导出未定义”来自导入的NPM模块。改变我的typescript配置没有任何作用,因为我无法控制导入的第三方代码。问题是该包的导入语法无效。例如,我已经导入了“@mui/material/TextField/TextField”,但正确的导入应该是“@mui/material/TextField”。

通过将模块编译器选项设置为es6可以解决这个问题:

{
  "compilerOptions": {     
    "module": "es6",
    "target": "es5",    
  }
}