【问题标题】:TypeError: require(...).jsdom is not a functionTypeError: require(...).jsdom 不是函数
【发布时间】:2017-09-22 06:05:09
【问题描述】:

我使用 Visual Studio 2015 进行 nodejs Web 开发。
我有以下适用于 nodejs 的软件包。

  • 正文解析器 1.18.1
  • 快递4.15.4
  • jquery 1.7.4
  • html 1.0.0
  • jsdom 11.2.0

我的 server.js 是

var http = require('http');
var express = require('express');
var bodyParser = require('body-parser');
var jsdom = require('jsdom');

var path = require('path');
var port = process.env.port || 1337;
var app = express();
app.use(bodyParser());

app.use('/bootstrap', express.static(__dirname + '/public/bootstrap'));
app.use('/css', express.static(__dirname + '/public/css'));
app.use('/jquery', express.static(__dirname + '/public/jquery'));
app.use('/pages', express.static(__dirname + '/public/pages'));
app.use('/popper', express.static(__dirname + '/public/popper'));
app.use('/scripts', express.static(__dirname + '/public/scripts'));

app.get('/', function (request, response) {
var $ = require('jquery');
var title = $(html).find('title').text();
console.log(title);
response.send("Hello node");
});
app.listen(port);

无法使用 jquery 得到错误。 "TypeError: require(...).jsdom 不是函数"

TypeError: require(...).jsdom is not a function
at create (c:\users\XYZ12\documents\visual studio 2015\Projects\NodeMovieList\NodeMovieList\node_modules\jquery\lib\node-jquery.js:5:31)
at c:\users\XYZ12\documents\visual studio 2015\Projects\NodeMovieList\NodeMovieList\node_modules\jquery\lib\node-jquery.js:9435:18
at Object.<anonymous> (c:\users\XYZ12\documents\visual studio 2015\Projects\NodeMovieList\NodeMovieList\node_modules\jquery\lib\node-jquery.js:9437:2)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)

【问题讨论】:

    标签: javascript node.js visual-studio nodes


    【解决方案1】:

    尝试使用以下,

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

    参考:https://github.com/airbnb/enzyme/issues/942#issuecomment-314715229

    【讨论】:

    • 我在哪里使用这个,请在​​我的代码中更新,因为如果我将此代码添加到顶部位置并得到相同的错误。
    【解决方案2】:

    像下面这样:

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

    希望这对您或遇到此类问题的任何人有所帮助。

    【讨论】:

    【解决方案3】:

    这个问题是因为您使用的是旧版本的 jQuery,请移至较新的版本,即 3.2.1。

    我也遇到了同样的错误,移到新版本解决了这个问题。您可以查看此答案以获取更多信息:https://stackoverflow.com/a/47215319/5892553

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 2021-03-03
      • 2016-02-10
      • 2018-03-11
      • 2021-07-21
      • 1970-01-01
      • 2015-07-25
      • 2019-04-10
      • 2017-06-25
      相关资源
      最近更新 更多