所以我最近在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本身,但仍然遇到了这个问题。有谁知道什么了?
答案 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