【问题标题】:How to resolve "jQuery requires a window with a document" with import如何通过导入解决“jQuery 需要一个带有文档的窗口”
【发布时间】: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());

标签: javascript node.js npm webpack


【解决方案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 不是函数" 谢谢,但我得到了这个错误。
  • 啊...我使用的是一个非常旧的版本。 ;)
猜你喜欢
  • 2019-10-21
  • 2014-02-16
  • 1970-01-01
  • 2017-08-29
  • 2013-12-21
  • 2017-10-22
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
相关资源
最近更新 更多