尝试按照官方手册实现一个模块,我得到这个错误消息:
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"
]
}
我也有这个问题。然后我只是把“module”:“commonjs”改为“module”:“ESNext”,一切都正常工作。
这是tsconfig.json:
{
"compilerOptions": {
"module": "ESNext",
"esModuleInterop": true,
"target": "ESNext",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
},
"lib": ["ESNext"],
}
希望它能解决你的问题!
我也犯了同样的错误。在我的例子中,这是因为我们在我们的TypeScript AngularJS项目中有一个老式的import语句,像这样:
import { IAttributes, IScope } from "angular";
它被编译成这样的JavaScript:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
这在以前是需要的,因为我们在代码中使用了IAttributes,否则TypeScript不知道该用它做什么。
但是在删除import语句并将IAttributes转换为ng之后。IAttributes这两行JavaScript代码消失了——错误消息也消失了。
我遇到了同样的问题,但我的设置需要不同的解决方案。
我使用的是带有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'
],
}