滚动条和打字稿

问题描述 投票:0回答:1

我被困在使用 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 支持人员发送了电子邮件以获取帮助。

javascript typescript node-modules importerror rollbar
1个回答
2
投票

如果这是 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

© www.soinside.com 2019 - 2024. All rights reserved.