我被困在使用 typescript 的 rollbar 中,而且他们的文档和 AWS 的文档一样糟糕。
我正在尝试构建一个可重用的包,基于rollbar,并使用最新的TS版本(我们所说的4.2.4)编写
所以..让我们深入研究代码部分(在有人问之前!)。
在我的index.ts中,我使用导入rollbar
import Rollbar from 'rollbar';
几行之后,我只是使用简单、愚蠢的新指令创建记录器实例:
const options = {
// [...]
}
this._logger = new Rollbar(options);
结合以下 tsconfig,我能够构建并发布最终的包。
{
"extends": "@tsconfig/node14/tsconfig.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/",
"declaration": true,
"moduleResolution": "node",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
},
"include": ["src/index.ts"]
}
但是,有一个但是,这是肯定的,否则他们不会有任何问题,当我尝试使用已发布的包时,我遇到了一个无法解决的错误。
TypeError: rollbar_1.default is not a constructor
这并不奇怪。如果我看一下生成的 JS,我们可以看到导入是使用 importDefault 完成的,并且结果存储到 rollbar_1 中。
const rollbar_1 = __importDefault(require("rollbar"));
class Logger {
constructor(options, context) {
const config = {
accessToken: '',
reportLevel: '',
codeVersion: '',
environment: ''
};
this._logger = new rollbar_1.default(config);
}
}
我在这里,我被困住了。
我不知道我在寻找什么,也不知道潜在的错误。
对于那些想要帮助我的人,这里是使用该包的项目的 tsconfig:
{
"extends": "@tsconfig/node14/tsconfig.json",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"moduleResolution": "node",
"outDir": "./dist/",
"rootDir": "./src/"
},
"exclude": ["node_modules", "tests"],
"include": ["src"]
}
对于 Sean,这是“require('rollbar')”的结果
肯定可以,返回值没有任何帮助
我向 Rollbar 支持人员发送了电子邮件以获取帮助。
如果这是 CommonJS 构建(例如 Node.js),建议的语法是:
import Rollbar = require('rollbar');
这可能看起来很奇怪,将
import
与 require
结合起来,但这是 Typescript 官方推荐的: https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--需要
如果是 es2015 或更高版本,
import Rollbar from 'rollbar'
应该可以工作。确保在 tsconfig 中设置 esModuleInterop
。 https://www.typescriptlang.org/tsconfig#esModuleInterop