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

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

当前回答

对于一些ASP。NET项目的导入和导出可能根本不会在Typescripts中使用。

当我试图这样做时,问题的错误出现了,我后来才发现,我只需要像这样将生成的JS脚本添加到视图:

<script src="~/scripts/js/[GENERATED_FILE].Index.js" asp-append-version="true"></script>

其他回答

我的解决方案是上面所有东西的总和,我添加了一些小技巧,基本上我把这个添加到我的html代码中

<script>var exports = {"__esModule": true};</script>
<script src="js/file.js"></script>

这甚至允许你使用import而不是require,如果你使用electron或其他东西,它在typescript 3.5.1, target: es3 -> esnext中工作得很好。

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

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

在包中。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

然后执行,应该没问题

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

npm安装@babel/plugin-transform- commonjs

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