0

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

所以我创建了一个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: 不能在模块外使用 import 语句

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

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

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

我还尝试将我的包与rollup、 、tscrollup-plugin-typescript2插件捆绑在一起,因为我知道rollup我可以使用它externals来声明mapbox-gl。由于某些未知的原因,似乎也没有声明我的接口,它们只声明了tscs 、s 和s(可能相关)。rollup-plugin-typescript2consttypeenum

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

  • 要么解决 jest 在导入我的包时的问题(同样,我在实际应用程序中工作得很好 - 它只在测试中失败)
  • 或找到一种方法来保留接口,同时将我的导出与汇总捆绑并声明mapbox-gl为外部

我看到的一种可能的解决方法是通过使我从中使用的类型成为动态来规避我的包中的 mapboxgl 导入:

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

而且,在我的项目中 go: options: DataSourceOptions<mapboxgl.Map, mapboxgl.Layer>,但公平地说,我真的不喜欢这个解决方案。它绕过了问题,但并没有解决问题。

4

1 回答 1

0

我可以通过设置来修复它:

"type": "module"

在模块中package.json,以及将其添加到使用它transformIgnorePatternsjest.config.js项目中,如上所示。

于 2022-02-13T16:09:36.257 回答