You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Deno引入npm包报错:window is undefined问题求助

解决Deno中npm包检测window未定义的问题

问题原因

你自己的Deno代码能访问window,但npm包的判断逻辑却抛出错误,核心原因是npm包运行在Deno的npm兼容层沙箱中,这个环境默认不会自动暴露window对象,和你自己代码运行的全局上下文不是同一个。调试时能在控制台访问window,是因为调试控制台处于全局上下文,而非包的运行沙箱内。

可行解决方案

1. 手动向npm兼容层注入window

在引入目标npm包前,把Deno全局的window挂载到npm兼容层的全局空间:

// 先初始化Node.js兼容的require
const { createRequire } = await import("node:module");
const require = createRequire(import.meta.url);
// 将Deno全局window注入到兼容层的globalThis
(globalThis as any).window = window;
// 再引入目标npm包
const yourSdk = require("你的npm包名称");

2. 启用Deno的浏览器兼容模式运行

启动Deno时添加--compat参数,强制启用浏览器兼容环境,让npm包能自动识别window对象:

deno run --compat --allow-net --allow-read 你的脚本文件.ts

注意:根据项目实际需求添加对应的权限参数(比如--allow-net、--allow-read)。

3. 临时修改缓存中的包代码(应急方案)

如果前两种方法无效,可以临时修改Deno缓存里的npm包代码:

  • 找到缓存路径(通常在~/.cache/deno/npm/registry.npmjs.org/下对应包的目录)
  • 将原判断逻辑修改为:
if (typeof window === 'undefined' && typeof globalThis === 'undefined') {
  throw new Error('Error initializing the sdk: window is undefined');
}

或者直接注释掉该判断。但此方法在包更新后会失效,仅作为临时应急用。

内容的提问来源于stack exchange,提问作者Yusuf Seyrek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:32:04