尊敬的StackOverflow用户,
我为浏览器和微信小程序制作了一个模块。该模块用多个TypeScript编写,并编译为一个缩小的文件。在该模块中,我需要使用DOM/BOM API,如document
、窗口, 'navigator
。在浏览器上,加载和使用编译后的单个文件没有问题。
但在微信小程序上,没有Node上的global
对象。浏览器上也没有document
和window
全局对象。为了解决这个问题,我为每个环境制作了两个构建命令。
grunt build
,用于浏览器的标准TS编译grunt wx_build
,微信小程序标准TS编译及附加补丁代码
修补后的js文件看起来像:
// mymodule-bundle.min.js
// patch
window=require("./miniapp-adapter/src/index.js");
document=require("./miniapp-adapter/src/document.js").default;
// original compiled/minified code
(function(f){if(typeof exports==="object"&&typeof module!=="undefined")...
在微信小程序项目中,我把mymodule-bundle.min.js
和miniapp-adapter
放在同一个文件夹中。因此,我可以将我的HTML5应用程序移植到微信小程序中。
但我想要一个更聪明的方法来做到这一点。
微信小程序运行时,如何在
mymodule.ts
中声明window
或document
全局变量
谢谢。
以下是如何声明它们:
declare const document: any
declare const window: any
为了获得更好的intelligense类型,如果你需要消费者使用它们,你只需将它们制作成代表你所放内容的类型。否则你就可以这样离开他们。
在Node中,您可以这样做:
declare namespace NodeJS {
export interface Global {
window: any
document: any
}
}
global.window = require("./miniapp-adapter/src/index.js");
global.document = require("./miniapp-adapter/src/document.js").default;
不过,为了在Node上惯用,您应该从模块中导出它们,而不是将它们加载到全局命名空间中。