web-dev-qa-db-fra.com

Nodejs jQuery a besoin de jsdom

$.getJSON('https://api.Twitch.tv/kraken/channels/' + SLoppierKitty7, function(channel) {

if (channel["stream"] == null) { 
    var live ="no"

} else {

      var live ="yes"

}

c'est mon code mais quand je le lance, j'obtiens l'erreur suivante 

E:\Bot Sloppers\node_modules\jQuery\lib\node-jquery.js: 5 Window = require ('jsdom'). Jsdom (). CreateWindow (); ^

TypeError: require (...). Jsdom (...). CreateWindow n'est pas une fonction Dans create (E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js: 5: 39 ) sur E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js: 9435: 18 sur Object. (E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js: 9437: 2) Dans Module._compile (module.js: 434: 26) Dans Object.Module ._extensions..js (module.js: 452: 10) dans Module.load (module.js: 355: 32) dans Function.Module._load (module.js: 310: 12) À Module.require (module.js: 365: 17) À require (module.js: 384: 17) À Object. (E:\Sloppers bot\bot.js: 2: 9)

que fais-je 

c'est pour un bot je travaille 

6
SloppierKitty7

jquery 3.2.1, jsdom 10.1.0. Ça marche.

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM(`<!DOCTYPE html>`);
const $ = require('jQuery')(window);

$('<h1>Hello</h1>').appendTo('body');
console.log($('h1').text());
13
sutara79

J'ai rencontré le même problème, et c'est OK maintenant après avoir changé le paquet de require('jQuery') à require('jquery'). Il semble que le dernier paquet ( jquery ) utilise une version plus récente de jQuery que l’ancienne ( jQuery ).

7
realjin

J'ai été confronté au même problème et lors du débogage, j'ai découvert quelque chose de nouveau.

Quand tu fais -

npm install jQuery

Il installe la version 1.7.4 de jQuery sur votre projet.

Et quand tu le fais -

npm install jquery

Il installe la version 3.2.1 de jQuery sur votre projet.

 enter image description here

La différence entre les deux commandes ne concerne que la majusculeQ. Donc, si vous obtenez cette erreur, vous utilisez probablement l'ancienne version de jQuery.

Vous pouvez en savoir plus sur la première commande (l'ancienne version) ici et sur la seconde commande ici .

3
Rito

Oui. jQuery s'attend à ce que la "fenêtre" soit présente, ce qui est normalement un objet réservé au navigateur. En tant que tel, la fenêtre doit être simulée. C'est ce que fait jsdom.

Après avoir inclus jsdom (npm install jsdom):

// Load jsdom, and create a window.
var jsdom = require("jsdom").jsdom;
var doc = jsdom();
var window = doc.defaultView;

// Load jQuery with the simulated jsdom window.
$ = require('jquery')(window);

Voir la documentation de jsdom pour plus d’informations: https://www.npmjs.com/package/jsdom

0
TinkerTank

rien n'a fonctionné pour moi d'ici, 

ma version de jquery: 3.2.1

jsdom version: 10.1.0 a finalement trouvé une solution:

var myHtmlString = 'akkadsf lakuseh alhf lasudfa ls<p></p>';

function jQuery(doc){
    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    const { window } = new JSDOM();
    const JQ = require("jquery")(window)(`<html>${doc || ''}</html>`);
}
var $ = jQuery;
// my html string:
var text = $(myHtmlString).text();
0
Raza Ahmed