import/export 的外部类型在 jest 单元测试 (vue2) 中失败

import/export of external types failing in jest unit tests (vue2)

我正在尝试创建一个包来导出我在多个项目中使用的某些类型、枚举、常量和接口。

所以我创建了一个 main.ts 并将所有导出放在那里,在 package.json 中指定它:"main": "main.ts".

我的一个出口需要一些 mapbox-gl 类型。显然,我不希望我的包包含 mapbox-gl 类型。所以我做了以下事情:

"peerDependencies": {
  "mapbox-gl": "^1.13.0"
},
"devDependencies": {
  "@types/mapbox-gl": "^1.13.0",
}

main.ts里面,我做:

import mapboxgl from "mapbox-gl";

export interface DataSourceOptions {
  shouldLoad?: boolean;
  name: string;
  map: mapboxgl.Map;
  layer: mapboxgl.Layer;
}

我发布了我的包,并将其导入到我的项目中,并且它按预期工作。 直到我尝试使用这个包测试任何组件。

Jest 抛出以下错误:

D:\path\to\project\node_modules\some-custom-package\main.ts:1 ({"Object.":function(module,exports,require,__dirname,__filename,global,jest){import mapboxgl from "mapbox-gl"; SyntaxError: Cannot use import statement outside a module

我试图通过在 jest.config.jstransformIgnorePatterns 中指定我的包来解决这个问题:

transformIgnorePatterns: [
  "<rootDir>/node_modules/(?!(@mapbox/mapbox-gl-draw" +
    "|some-custom-package" +
    ")/)",
],

但是,我仍然看到同样的错误。

我也尝试过使用 tscrollup-plugin-typescript2 插件将我的包与 rollup 捆绑在一起,因为我知道在 rollup 中我可以使用 [=26] =] 来声明 mapbox-gl。由于某些未知原因,tscrollup-plugin-typescript2 似乎都没有声明我的接口,它们只声明了 consts、types 和 enums(possibly related).

我知道这看起来像是将多个问题合二为一,但我只是在寻找解决方案。


我看到的一个可能的解决方法是通过使我从中使用的类型动态化来绕过我的包中的 mapboxgl 导入:

export interface DataSourceOptions<M,L> {
  shouldLoad?: boolean;
  name: string;
  map: M;
  layer: L;
}

并且,在我的项目中:options: DataSourceOptions<mapboxgl.Map, mapboxgl.Layer>,但老实说,我不太喜欢这个解决方案。它规避了问题,并没有解决问题。

我能够通过设置修复它:

"type": "module"

在模块的 package.json 中,并将其添加到使用它的项目的 jest.config.js 中的 transformIgnorePatterns,如上所示。