如何在jsdom @ 5中使用jQuery?

unt*_*led 11 jquery node.js jsdom io.js

我正在从node.js迁移到io.js,而我的旧node.js代码不适用于jsdom @ 5.

var jsdom=require('jsdom');
var $=require('jquery')(jsdom.jsdom().createWindow);
Run Code Online (Sandbox Code Playgroud)

这是错误:

/tmp/iojs/node_modules/jquery/dist/jquery.js:28
                                if ( !w.document ) {
                                       ^
TypeError: Cannot read property 'document' of undefined
    at module.exports (/tmp/iojs/node_modules/jquery/dist/jquery.js:28:12)
    at Object.<anonymous> (/tmp/iojs/test.js:2:24)
    at Module._compile (module.js:431:26)
    at Object.Module._extensions..js (module.js:449:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:472:10)
    at startup (node.js:124:18)
    at node.js:959:3
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的io.js v2.0.1,jsdom@5.4.1jquery@2.1.4.

在jsdom @ 5中使用jQuery的正确方法是什么?

und*_*ned 27

以下内容更符合您的要求.看看回购

 // using Version 5.4.1
 var jsdom = require('jsdom').jsdom;
 var document = jsdom('<html></html>', {});
 var window = document.defaultView;
 var $ = require('jquery')(window);
Run Code Online (Sandbox Code Playgroud)

原始代码的具体问题是它使用的createWindowAPI 在jsdom 1.0.0-pre.1中删除.(请注意,该document.parentWindow更改日志条目中的建议随后在4.0.0中删除.)


add*_*sas 9

查看文档https://github.com/tmpvar/jsdom.这适用于jsdom@11.5.1

var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM('<html></html>');
var $ = require('jquery')(window);
Run Code Online (Sandbox Code Playgroud)