If you develop on Windows, it is very easy to accidentally do:
var Q = require("Q");
for the package named "q". Similarly for modules, one could do:
var x = require("./LiB/UtiL/X");
for the module which is checked in to source control as "lib/util/x" (and
appears in Windows explorer lowercased as well).
The problem is, both of these work on Windows, since in Windows filenames
are case-insensitive. But when sharing code across platforms, your code
will break everywhere else. I don't know how many people develop on Windows
and then push to *nix hosting (e.g. Heroku or Nodejitsu), but it's probably
significant.
This is a moderately hard problem to debug, as you have to SSH into your
*nix box and run your program to find out why the server's suddenly down by
running your program manually. Or in the library case, you have to wait for
someone to use your library on *nix, AND be nice enough to not give up in
disgust when they get "cannot find module 'Q'".
----
I think the best solution would be to make module names case-sensitive on
Windows. I know it's a change to the module system, but this problem has
bit us several times.