27

How should I requirethe jquery in node if I use it in multiple modules? Should I define it as a global or should I just use the require('jquery)` in every module I need it?

I am getting an error when trying to use the package.

TypeError: Object function ( w ) {
            if ( !w.document ) {
                throw new Error( "jQuery requires a window with a document" );
            }
            return factory( w );
        } has no method 'isArray'

It looks like a bug in the current release as it should not check if I am running it in a browser according to the official documentation. This issue is also mentioned in another post. It works with version 1.8.3 as mentioned in one of the answers.

Community
  • 1
  • 1
Pio
  • 4,044
  • 11
  • 46
  • 81

2 Answers2

23

To use jquery in node, you need to have two separate node package installations.

  1. jquery
  2. jsdom to create a dummy window object which jquery can use.

Installation:

npm install jquery
npm install jsdom

In code:

var jsdom = require("jsdom").jsdom;
global.$ = require('jquery/dist/jquery')(jsdom().createWindow());

Or, with newer versions of jsdom:

require("jsdom").env("", function(err, window) {
    if (err) {
        console.error(err);
        return;
    }

    var $ = require("jquery")(window);
});

Using global.$ will make the jquery object($) available globally in your project.

alki
  • 3,334
  • 5
  • 22
  • 45
agaase
  • 1,562
  • 1
  • 15
  • 24
19

You can use as below to handle as usual:

var $;
$ = require('jquery');
$('.tag').click(function() {
  return console.log('clicked');
});
MahyarJ
  • 311
  • 3
  • 9