在RunKit中使用QueryQl组件遇window不存在问题,如何修复?
修复RunKit中QueryQl的全局对象问题
嘿,这问题我熟!RunKit是基于Node.js的环境,确实没有浏览器里的window对象,所以直接创建空的window肯定不行——QueryQl库大概率是为浏览器环境开发的,默认会去访问window作为全局上下文,咱们得把它指向Node.js的全局对象global才行。
修复后的代码
// 把Node.js的global对象映射为库期望的window global.window = global; const QueryQl = require("queryfilters/queryql"); // 接下来正常使用QueryQl就没问题了 var q = new QueryQl(); q.json({ 'ciao': 'mondo' }); const queryString = q.getQueryString(); // 可以打印结果验证一下 console.log(queryString);
为什么这么改?
- Node.js的全局对象是
global,而非浏览器的window,直接给global添加window属性并指向自身,就能让依赖window的库在Node环境中正常找到全局上下文。 - 你之前创建的空
window对象是个空壳,缺少库可能需要的全局方法/属性,反而会导致库运行异常,所以直接复用global才是正确的做法。
如果这样还是有问题,可以去看看queryfilters/queryql的文档,确认有没有专门针对Node.js环境的配置方式,但这种全局对象映射的方法,基本能解决绝大多数浏览器库在Node环境的适配问题~
内容的提问来源于stack exchange,提问作者sensorario
相关产品推荐
相关产品推荐

