我正在努力让Leaflet库与我的Typescript项目很好地配合。
我的项目遵循commonJs模式(在我的源文件中导入\ exports),但是当我使用webpack构建时,编译器从我的文件中给出了以下错误,我尝试访问L
全局公开的传单模块
' L'是指UMD全局,但当前文件是一个模块。考虑 改为添加导入。
现在我可以解决这个问题,如果我将传单导入我的源文件中,如下所示:
import * as L from 'leaflet'
但是我想知道我是否可以在我的所有文件中全局访问t,而不必在每个文件中都有导入。
我有一个挖掘并找到了一些解决方法,您可以像这样声明自己的全局变量:
globals.d.ts
import * as L from "leaflet";
declare global {
const L: L
}
export {};
我不确定这是否是推荐的,感觉有点脏,有没有正确的方法使用webpack配置为UMD模块提供为commonJs项目公开的全局变量,还是我在胡说八道?我承认我很难理解模块类型和它们的可互换性之间的差异,所以对我来说很容易!
答案 0 :(得分:0)
在模块中,您可以导入其他模块或使用全局变量。无法一次将模块导入所有模块。如果你懒得在任何地方写入导入,那么你应该使用全局变量。
UMD模块系统是通用的。如果将其导入某个模块(CommonJS,AMD ...),则其行为类似于模块,即它不会填充全局范围。如果您希望UMD变为全局,则应将其添加为extern "C" {
<rest of your class definition>
}
到页面。然后,您可以使用<script>
文件通知TypeScript,即全局范围内可用的leafet。那里没有任何黑客攻击(此外,使用全局范围而不是模块本身就是黑客攻击)。