尝试按照官方手册实现一个模块,我得到这个错误消息:
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"
]
}
我认为问题可能是配置不匹配。
下面的工作解决方案1为您提供了ES模块的正确配置。
下面的工作解决方案2为您提供了正确的CommonJS配置。
混合解决方案1+2给你一个错误。
为了清晰起见,我在这里只发布了部分内容。
Github项目https://github.com/jmmvkr/ts-express/
准备一套完整的文件来演示工作解决方案1和解决方案2。
工作方案1,ES模块
/* Configuration for ES Module */
// tsconfig.json
{
"compilerOptions": {
"module": "es6", // or "esnext"
}
}
// package.json
{
"type": "module", // type is module
}
工作解决方案2,CommonJS
/* Configuration for CommonJS */
// tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
}
}
// package.json
{
"type": "", // type is NOT module
}
混合,不工作
/* Mixed, got ReferenceError: exports is not defined in ES module scope */
// tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
}
}
// package.json
{
"type": "module", // type is module
}
注意:这可能不适用于OP的答案,但我得到了这个错误,这就是我解决它的方式。
所以我面临的问题是,当我从一个特定的CDN检索一个'js'库时,我得到了这个错误。
我做的唯一错误的事情是从CDN的cjs目录导入,就像这样:
https://cdn.jsdelivr.net/npm/@popperjs/core@2.4.0/dist/cjs/popper.min.js
注意到dist/cjs部分了吗?这就是问题所在。
在我的例子中,我回到CDN (jsdelivr)并导航到umd文件夹。我可以找到另一组popper.min.js,这是要导入的正确文件:
https://cdn.jsdelivr.net/npm/@popperjs core@2.4.0 / dist / / popper.min.js umd格式。