如何在节点包中访问 window
How to access window in a node package
如今,许多 npm/node 软件包不仅在 node.js 上使用,而且还在网络上使用 webpack
或 rollup
等工具。
我正在创建一个我想在网络上使用的包。如何访问浏览器提供的全局 window
对象?
是否有一些包可以向我公开此对象?
在浏览器中 运行 时,全局变量 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");
}
开发人员可以通过在加载您的代码之前在全局环境中同时定义 window
和 window.document
或通过从您的代码中编辑此检查来绕过这些检查,但此时,他们反正都是靠自己。
如今,许多 npm/node 软件包不仅在 node.js 上使用,而且还在网络上使用 webpack
或 rollup
等工具。
我正在创建一个我想在网络上使用的包。如何访问浏览器提供的全局 window
对象?
是否有一些包可以向我公开此对象?
在浏览器中 运行 时,全局变量 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");
}
开发人员可以通过在加载您的代码之前在全局环境中同时定义 window
和 window.document
或通过从您的代码中编辑此检查来绕过这些检查,但此时,他们反正都是靠自己。