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

Node.js(CommonJS)嵌套函数内require导入常量为undefined的问题

问题原因与解决方案:Node.js中puppeteer嵌套函数里外部变量变为undefined

原因分析

  • puppeteer的page.$eval()(以及page.evaluate()这类执行浏览器端代码的方法),它的回调函数是在浏览器的前端上下文里运行的,和Node.js后端环境完全隔离。
  • 你导入的SRLoginCredentials是Node.js进程内的变量,浏览器上下文根本不知道这个变量的存在,所以打印出来自然是undefined。
  • 外部的console.log(SRLoginCredentials)能正常输出,是因为它运行在Node.js主进程里,可直接访问导入的变量。

解决方案

要把Node.js环境的变量传到浏览器上下文,得通过page.$eval()的第三个参数来传递:

修改main.js里的对应代码:

await page.waitForSelector('#APjFqb');
console.log(SRLoginCredentials);            // 这里在Node环境,正常输出

// 把SRLoginCredentials作为第三个参数传入回调,回调里对应接收
await page.$eval('#email', (el, credentials) => {
  console.log(credentials); // 现在能正常访问到变量了
}, SRLoginCredentials);

补充说明

  • 传递的变量必须是可序列化的(比如普通对象、字符串、数字),像函数、DOM元素这类无法序列化的内容传不了,你的SRLoginCredentials是普通对象,完全符合要求。
  • 浏览器上下文的回调里,没法直接使用Node.js里的任何模块或变量,所有依赖的值都得通过参数传递进去。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:48:24