Side navigation
#14650 closed bug (notabug)
Opened December 22, 2013 08:22PM UTC
Closed December 23, 2013 04:10PM UTC
jQuery .each broken for Node
Reported by: | Piper0804@gmail.com | Owned by: | Piper0804@gmail.com |
---|---|---|---|
Priority: | undecided | Milestone: | None |
Component: | unfiled | Version: | 2.1.0-beta2 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
Using 2.1.0-beta3 ''(version is not selectable from dropdown)'', I receive the following error when calling ''.each'' of the jQuery module. This was working fine with the previous version. Please let me know if I can supply any more info.
Cheers,
Denise
brokenjQuery.js file contents:
var $ = require('jquery'); $.each(['1','2','3','4'], function(i) { console.log(i); });
run node brokenjQuery.js, and receive:
Object function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); } has no method 'each'
Attachments (0)
Change History (5)
Changed December 22, 2013 08:52PM UTC by comment:1
owner: | → Piper0804@gmail.com |
---|---|
status: | new → pending |
Changed December 22, 2013 09:50PM UTC by comment:2
brokenjQuery.js above is run using node. There is no browser or window or document present, it's running on the shell or whatever environment node uses by default.
As a side note, I've reverted back to 1.8.3 to get this working locally, but wanted to point out the issue because any node developers referencing jQuery "*" in their package will get broken code when they update.
Cheers,
Denise
Changed December 22, 2013 10:12PM UTC by comment:3
Can you please answer the question of what the use case is? Why are you using jQuery in an environment that doesn't have a window? Generally jQuery is used on the server with something like jsdom which provides the window. If all you want is utility methods, jQuery is a terrible choice.
As a side note, if you're using *
for your version, you're asking for your code to break without warning.
Changed December 22, 2013 11:48PM UTC by comment:4
status: | pending → new |
---|
I've given my exact use case. When I run these 4 lines the code breaks with the error stated above.
var $ = require('jquery'); $.each(['1','2','3','4'], function(i) { console.log(i); });
jQuery is published to npm for use in node applications.
I'll take a look at jsdom, thanks.
Changed December 23, 2013 04:10PM UTC by comment:5
resolution: | → notabug |
---|---|
status: | new → closed |
jQuery is published to npm so it can be used for DOM-related applications, either using node.js or browserify. In those situations you'd need to have a browser-like environment, which would include document
and window
. If you're only using the non-DOM utilities like $.each()
then you should be using a non-DOM library such as lodash.js.
We're still not clear on the use case here but it doesn't seem like one we've intended to address, so I'll close this ticket. Feel free to provide more information if you'd like so we can understand.
Exactly what is your use case? Are you saying you only using methods like
$.each()
and therefore don't need awindow
ordocument
for your case?