jsdom.env не работает на node.js C9

Поэтому я недавно работал с Node.js на C9 и столкнулся с этой проблемой в файле 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);
  });
});

Я обновил все свои зависимости, а также сам узел, но все еще получаю эту проблему. Кто-нибудь знает, что случилось?

2 ответа

Я столкнулся с той же проблемой. Искал решение по всей сети. Оказалось, что jsdom обновил некоторые из своих функций начиная с v10. Итак, я хотел использовать jQuery в конце экспресс-приложения Node.js и должен был сделать это, как показано ниже:

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

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

.env () устарела начиная с v10. Надеюсь, что это поможет вам или всем, кто сталкивался с такими проблемами.

Как упоминалось выше, .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 в глобальный узел

Обычный антипаттерн, который мы видим, когда люди используют jsdom, копирует глобалы из окна jsdom в глобал Node.js, а затем пытается запустить код, предназначенный для браузера, внутри Node.js. Это очень плохо, и вы не должны этого делать. Он запускает код, предназначенный для веб-браузера, в некой гибридной среде franken-среды, загрязненной множеством глобальных переменных, которые здесь не имеют смысла, и теряет все преимущества изоляции вашего кода в окне jsdom.

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

Шаг 1: npm установить jquery

Шаг 2: npm установить jsdom

<!-- language: lang-js -->
    //add dummy function to test jquery in Node
    function fn1( value ){ console.log( "fn1 says " + value );}  
function fn2( value ) {console.log( "fn2 says " + value ); return false;}
    var jsdom = require('jsdom');
    const { JSDOM } = jsdom;
    const { window } = new JSDOM();
    const { document } = (new JSDOM('')).window;
    //comment out the line below it create problem
    //global.document = document;
    var $ = jQuery = require('jquery')(window);
    var callbacks = $.Callbacks();
    callbacks.add(fn1);
    callbacks.fire("foo!");
    callbacks.add( fn2 ); 
    callbacks.fire( "fool!" );
Другие вопросы по тегам