1

我被使用带有 typescript 的 rollbar 卡住了,他们的文档和 aws 一样差。

我正在尝试构建一个基于rollbar的可重用包,并使用最新的TS版本(我们所说的4.2.4)编写

所以.. 让我们深入研究代码部分(在有人问之前!)。

在我的 index.ts 中,我使用

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 支持以获得一些帮助。

4

1 回答 1

1

如果这是一个 CommonJS 构建(例如 Node.js),推荐的语法是:

import Rollbar = require('rollbar');

import结合 ,这可能看起来很奇怪,require但这是 Typescript 官方推荐的:https ://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require

如果它是 es2015 或更高版本,import Rollbar from 'rollbar'应该可以工作。确保esModuleInterop在您的 tsconfig.xml 中进行设置。https://www.typescriptlang.org/tsconfig#esModuleInterop

于 2021-05-07T21:14:26.080 回答