8

我正在尝试让 Leaflet 库与我的 Typescript 项目配合得很好。

我的项目遵循 commonJs 模式(我的源文件中的导入\导出),但是当我使用 webpack 构建时,编译器从我的文件中给我以下错误,我尝试访问L传单模块公开的全局

'L' 指的是一个 UMD 全局,但当前文件是一个模块。考虑改为添加导入。

现在,如果我将传单导入到我的源文件中,我可以解决这个问题,如下所示:

import * as L from 'leaflet'

但是我想知道是否可以在我的所有文件中全局访问 t 而不必在每个文件中导入。

我进行了一番挖掘,发现了一些解决方法,您可以像这样声明自己的全局变量:

全局.d.ts

import * as L from "leaflet";

declare global {
  const L: L
}
export {};

我不确定这是否被推荐,感觉有点脏,webpack 配置是否有适当的方法来为 commonJs 项目提供 UMD 模块公开的全局变量,还是我在胡说八道?我承认我在试图理解模块类型及其可互换性之间的差异时感到困惑,所以放轻松!

4

1 回答 1

0

在模块中,您可以导入其他模块或使用全局变量。无法一次将模块导入所有模块。如果你懒得到处写 import,那么你应该使用全局变量。

UMD 模块系统是通用的。如果它被导入到某个模块(CommonJS、AMD...),那么它的行为就像模块一样,即它不填充全局范围。如果您希望 UMD 成为全球性的,您应该将其添加<script>到页面中。然后,您可以使用.d.ts.file 通知 TypeScript,该传单在全局范围内可用。那里没有任何黑客攻击(此外,使用全局范围而不是模块现在本身就是一种黑客攻击)。

于 2018-02-25T06:47:53.100 回答