尝试按照官方手册实现一个模块,我得到这个错误消息:
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,我将尝试使答案更完整。
原来的答案
如果CommonJS没有安装(它定义了exports),你必须从tsconfig.json中删除这一行:
"module": "commonjs",
根据注释,仅这一点可能不适用于tsc的后续版本。如果是这样的话,你可以安装一个模块加载器,比如CommonJS, SystemJS或RequireJS,然后指定它。
注意:
看看tsc生成的main.js文件。你会发现在最上面:
Object.defineProperty(exports, "__esModule", { value: true });
它是错误信息的根,删除"module": "commonjs",,它将消失。
试试@iFreilicht上面建议的方法。如果在你安装了webpack之后没有工作,你可能只是从网上的某个地方复制了一个webpack配置,并在那里配置了你想要输出支持CommonJS的错误。确保在webpack.config.js中不是这样:
module.exports = {
mode: process.env.NODE_ENV || "development",
entry: {
index: "./src/js/index.ts"
},
...
...
output: {
libraryTarget: 'commonjs', <==== DELETE THIS LINE
path: path.join(__dirname, 'build'),
filename: "[name].bundle.js"
}
};
我遇到了同样的问题,但我的设置需要不同的解决方案。
我使用的是带有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'
],
}