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

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

当前回答

由于ES5/ES2009不支持客户端/浏览器上的模块(导入/导出/要求),你必须使用库,它将模块捆绑到一个文件中,可以通过<script>标记包含,例如

Browserify Webpack

看看这个答案。

其他回答

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

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

对于仍然有这个问题的人,如果你的编译器目标设置为ES6,你需要告诉babel跳过模块转换。为此,将此添加到.babelrc文件中

{
  "presets": [ ["env", {"modules": false} ]]
}

在包中。Json,添加"type": "module"

在终端中

npx tsc --init

它将创建一个tsconfig.json。

在tsconfig.json,

将"target": "es5"改为"target": "es6" 注释掉//"module": "commonjs", uncomment " modulerresolve ": "node",

你应该可以出发了。

在包中。Json,创建一个构建脚本:

"build": "tsc -p tsconfig.json"

然后,当你想要构建时,你只需要编译npm run build

然后执行,应该没问题

一个解决方案:

从package.json中删除"type": "module"。

npm安装@babel/plugin-transform- commonjs

添加到.babelrc插件解决了我的问题。