如何通过导入解决“jQuery 需要一个带有文档的窗口”

Posted

技术标签:

【中文标题】如何通过导入解决“jQuery 需要一个带有文档的窗口”【英文标题】:How to resolve "jQuery requires a window with a document" with import 【发布时间】:2018-07-05 04:51:38 【问题描述】:

我收到jQuery requires a window with a document 错误,我似乎需要一个类似的答案:Error: jQuery requires a window with a document

我正在寻找的是使用 import 而不是 require 的正确语法,因为我的 Node 应用程序中没有 require-ing 其他任何东西。我试图让它在 React 组件中工作。我试过了:

import jsdom from 'jsdom';
import $ from 'jquery';

jsdom.jsdom().createWindow();

和:

import jsdom from 'jsdom';
const $ = require('jquery')(jsdom.jsdom().createWindow());

但这并没有让我到达那里。我该如何解决这个问题?

【问题讨论】:

1.你正在使用反应。惊讶地发现你需要 jquery。在大多数情况下,您不会,请参阅youmightnotneedjquery.com 2. require-ing 与 import-ing 取决于您的捆绑器以及它可以解决什么以及如何解决它。查看npmjs.com/package/jquery,了解如何为您的捆绑程序包含 jquery。 3. 看起来你的问题更像是一个真正的问题,如果需要的话,我会去的。 正如@AhmedMusallam 所说,require 可能更适合您。你试过吗:const $ = require('jquery')(jsdom.jsdom().createWindow()); 【参考方案1】:

注意:这只适用于旧版本的 jsdom。

我这样做是为了tests for using jQuery Mockjax in a Node context。本质上,我使用 jsdom env() 方法生成带有空白 html 文档的 window 对象:

const jsdom = require('jsdom');
let $;

jsdom.env('<html></html>', function (error, window) 
    if (error) 
        // handle this somehow
     else 
        $ = require('jquery')(window);
        // now you have it...
    
);

【讨论】:

(显然我没有使用 ES6 imports,但我认为您可以从我所拥有的中找到解决方案。) "_jsdom2.default.env 不是函数" 谢谢,但我得到了这个错误。 啊...我使用的是一个非常旧的版本。 ;)

以上是关于如何通过导入解决“jQuery 需要一个带有文档的窗口”的主要内容,如果未能解决你的问题,请参考以下文章

如何将证书导入到本地计算机

如何解决“BPM导入组织架构出现问题导致系统无法登陆”

java项目(java project)如何导入jar包的解决方案列表

excel文件每次导入报错: sql datetime溢出,如何解决

测试必备技能系列1 :通过mysql命令进行脚本数据导入

测试必备技能系列1 :通过mysql命令进行脚本数据导入