首页 > 解决方案 > 如何访问节点包中的窗口

问题描述

这些天来,许多 npm/node 包不仅在 node.js 上使用,而且在 web 上也使用,使用诸如webpackor之类的工具rollup

我正在创建一个我想在网络上使用的包。如何访问window浏览器提供的全局对象?

是否有一些包可以将这个对象暴露给我?

标签: node.jsnpmwindow-object

解决方案


在浏览器中运行时,全局变量window存在,您只需使用它。如果您在适当的环境中运行代码,则无需执行任何操作即可使其呈现或可用。如果在 node.js 中运行代码,则该window变量将不存在。

如果您的代码仅针对一种环境而设计,那么程序员通常只能尝试在适当的环境中使用它,并且您会记录它需要什么环境。

如果您想通知开发人员他们错误地使用了它,您可以在顶层代码中执行以下操作:

if (typeof window !== "object" && typeof window.document !== "object") {
    // does not appear to be a browser environment
    throw new Error("This code is only meant to run in a browser environment");
}

开发人员可以通过在加载代码之前在全局环境中定义两者来绕过这些检查,或者通过windowwindow.document代码中编辑此检查来绕过这些检查,但在那时,它们无论如何都是独立的。


推荐阅读