Node.js运行JS时报ReferenceError: document is not defined错误如何解决
报错根因
document是浏览器专属的DOM API全局对象,仅在浏览器运行环境中存在,Node.js作为服务端JavaScript运行环境,默认未提供该全局对象,因此执行包含DOM操作的代码时就会触发该报错。
你此前用node index.js可正常运行,是因为之前的代码中没有调用document相关的DOM操作逻辑,近期新增了获取页面元素的关联代码后才触发报错。
修复方案
根据你的开发场景选择对应方案即可:
- 方案1(适配网页游戏的开发需求,最推荐):你开发的是网页端二十一点游戏,JS代码本身应该嵌入HTML文件在浏览器环境运行,不需要用Node执行。只需在对应HTML文件中引入你的JS文件:
<script src="./index.js"></script>,之后直接在浏览器打开HTML文件,或用VS Code的Live Server插件启动本地静态服务访问即可。 - 方案2(仅需在Node端测试游戏核心逻辑):将DOM交互逻辑和游戏核心运算逻辑拆分,剥离纯逻辑部分单独测试,注释或移除所有
document、window等浏览器专属API的调用代码。 - 方案3(需要在Node端模拟DOM环境):安装jsdom类库模拟浏览器DOM环境,手动注入全局
document对象,示例代码如下:
// 先执行npm install jsdom安装依赖 const { JSDOM } = require('jsdom'); const dom = new JSDOM('<!DOCTYPE html><div id="message-el"></div>'); global.document = dom.window.document; // 后续再执行原本的DOM操作代码即可正常运行 let messageEl = document.getElementById("message-el");
内容的提问来源于stack exchange,提问作者João Silva
相关产品推荐
相关产品推荐

