【问题标题】:Errors using JQuery with node.js将 JQuery 与 node.js 一起使用时出错
【发布时间】:2012-10-10 09:06:56
【问题描述】:

我在 Windows 7 上运行了全新安装的 node.js,我正在尝试运行一个非常基本的 JQuery 脚本,名为 a.js,其中仅包含:

require("jquery");
$().jquery;

不幸的是,这不会与 JQuery 一起运行,给我一个 TypeError:

C:\Users\Ian>node a.js

C:\Users\Ian\node_modules\jquery\lib\node-jquery.js:10
    window.XMLHttpRequest.prototype.withCredentials = false;
                         ^
TypeError: Cannot read property 'prototype' of undefined
    at create (C:\Users\Ian\node_modules\jquery\lib\node-jquery.js:10:26)
    at C:\Users\Ian\node_modules\jquery\lib\node-jquery.js:9435:18
    at Object.<anonymous> (C:\Users\Ian\node_modules\jquery\lib\node-jquery.js:9437:2)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (C:\Users\Ian\a.js:1:63)

我通过 Google 发现了一些关于此错误的错误报告,其中大部分建议降级 JQuery。但是,当我这样做时,我会得到一个不同的错误。以下是 JQuery 1.6.3:

C:\Users\Ian>node a.js

module.js:340
    throw err;
      ^
Error: Cannot find module 'location'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at create (C:\Users\Ian\node_modules\jquery\node-jquery.js:6:33)
    at C:\Users\Ian\node_modules\jquery\node-jquery.js:9065:18
    at Object.<anonymous> (C:\Users\Ian\node_modules\jquery\node-jquery.js:9067:2)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)

谁能提出什么问题?我尝试了各种重新安装该软件的方法,但都没有成功。我已经为 jquery 的默认版本和 jquery@1.6.3 尝试了 npm install -gnpm install

编辑:This question - 尚未得到答复 - 似乎相关。

【问题讨论】:

  • 为什么要在服务器端运行 jQuery?
  • 没有好的答案对不起@SLaks - 我正在使用在服务器端运行 JQuery 的其他人的代码。当我无法让它工作时,我想出了一个简单的测试示例,以确保问题只出在 JQuery 部分,而不是其他人的代码中的任何其他部分。
  • @Ina 是的,但这就是问题所在,jQuery 不是服务器端库,它依赖于节点中不存在的东西。
  • @JakubHampl 所以你认为没有解决方法吗?我相信我继承的代码运行良好。我可以通过手动安装软件包(例如上面的位置)来解决问题,但我最终遇到了 TypeError。我也很感激您可以提供的任何链接,而不是服务器端库,npmjs.org/package/jquery 似乎暗示它是,但我是新手,很容易出错。
  • @SLaks 有时您会在服务器端重复使用为浏览器编写的库。

标签: jquery node.js npm


【解决方案1】:

您必须将模块分配给$ 变量:

var $ = require('jquery');
$().jquery;

【讨论】:

  • 是的,但是错误发生在第 1 行,所以不是未定义的$
  • 感谢@zeMirco,不幸的是,这并没有改变我的任何错误。
  • 错误必须在您未向我们显示的其余代码中。第一个错误是 window.XMLHttpRequest 未定义。
  • 我刚刚从节点 v0.8.12 降级到 v0.8.11,但这对我没有帮助。
【解决方案2】:

在 jquery-nodejs 项目的 git 页面中,说这在 Windows 上不起作用,所以问题出在你的操作系统上。 https://github.com/coolaj86/node-jquery

【讨论】:

  • 我在 Mac OS X 上遇到了同样的问题。可能与节点 0.10.0 有关,因为我在升级之前没有看到它发生。
  • 这不太准确:contextify 在 Windows 上构建并不容易,但如果您安装了所需的 MS 构建工具,您可以使用 node-gyp 实现它。一旦你这样做了,jQuery 应该是可安装的。
【解决方案3】:

如果你在节点 0.10.x ... 运行 sudo npm rebuild

https://github.com/coolaj86/node-jquery/issues/35

【讨论】:

  • 太棒了!谢谢你拯救了我的夜晚:)
  • 这也让我更早。我正在运行ubuntu。 Apt get 只能得到 0.6。升级到0.10然后这个错误。清除 node_modules 并重新运行 npm install。
【解决方案4】:

我在 REHL 上遇到了这个问题,sudo npm rebuild 为我解决了这个问题。

【讨论】:

    【解决方案5】:

    对于运行 Windows 的用户,npm rebuild 可能无法正常工作,您可能仍会看到类似以下内容:

    C:\Projects\NODE\paragraphs\node_modules\jquery\lib\node-jquery.js:10
    window.XMLHttpRequest.prototype.withCredentials = false;
                         ^
    TypeError: Cannot read property 'prototype' of undefined
    

    找到this solution 感谢用户NeverI 为我解决了问题:

    在 node-jquery.js(位于 \node_modules\jquery\lib 下)中更改行:

    if(window == null ) {
        window = require('jsdom').jsdom().createWindow();
    

    到:

     if(!window || !window.document) {
        window = require('jsdom').createWindow();
        window.document = require('jsdom').jsdom();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2012-01-05
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      相关资源
      最近更新 更多