jsdom.env没有在node.js C9上工作

时间:2017-07-12 23:11:52

标签: javascript node.js jsdom

所以我最近在C9上使用Node.js并在javascript文件中遇到了这个问题:

jsdom.env("", function(err, window) {
TypeError: jsdom.env is not a function

这是我的代码:

var jsdom = require('jsdom');
var $;
jsdom.env("", function(err, window) {
console.log("what");
if (err) {
    console.error(err);
    return;
}

$ = require("jquery")(window);

$.ajax(settings).done(function (response) {
     console.log(response);
  });
});

我更新了所有依赖项以及Node本身,但仍然遇到了这个问题。有谁知道什么了?

3 个答案:

答案 0 :(得分:14)

我遇到了同样的问题。正在寻找整个网络的解决方案。事实证明,自从v10以来,jsdom已经更新了一些功能。所以,我想在快速应用程序的Node.js端使用jQuery,并且必须如下所示:

var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;

var $ = jQuery = require('jquery')(window);

自v10起,

.env()已弃用。希望这可以帮助您或任何遇到过这类问题的人。

答案 1 :(得分:1)

第1步:npm install jquery

第2步:npm install jsdom

@Statelss

答案 2 :(得分:0)

如上所述,不建议使用.env()。
使用以下内容:

const { window } = new JSDOM(``, { runScripts: "dangerously" });
const myLibrary = fs.readFileSync("../../whatever.js", { encoding: "utf-8" });

const scriptEl = window.document.createElement("script");
scriptEl.textContent = myLibrary;
window.document.body.appendChild(scriptEl);


关于上述答案,以及来自jsdom文档:
不要将jsdom全局变量填充到Node全局变量中

  

我们在人们使用jsdom时看到的常见反模式是复制全局变量   从jsdom窗口到全局Node.js,然后尝试运行   Node.js内的代码(用于浏览器)。这真是太糟了   而你不应该这样做。它运行用于Web浏览器的代码   某种混合的弗兰肯环境被大量的地球污染   在那里没有意义,并失去了隔离您的所有好处   代码放入jsdom窗口。

https://github.com/jsdom/jsdom/wiki/Don%27t-stuff-jsdom-globals-onto-the-Node-global