I\'ve always been a bit annoyed that there are two major realms of javascript projects -- Node and \"the browser\" -- and while most browser JS can be easily run inside Node
Code that runs on the client usually have very different goals from the code that runs on the server. However when it makes sense to use some libarary's features in both environments there are a lot of them that are defined using a universal AMD form which makes them platform independent (e.g. Q).
The major difference between both environments is that one is subject to rigorous security policies and restrictions (browser) while the other isin't. The browser is also an untrustable environment for security-related operations such as enforcing security permissions.
I'll also add @jfriend00 comment in here since I believe it's also very relevant a exposes other differences:
The biggest practical difference is that you have to design a browser application to work in an installed base of existing browsers including older versions (lowest common denominator). When deploying a node application, you get to select the ONE version of node that you want to develop for and deploy with. This allows node developers to use the latest greatest features in node which won't be available across the general browser population for years. @jfriend00
Projects like browserver are interesting and I am all for experimental development, but are they truly useful in practice? Libraries should be designed for the environment in which they are truly useful. There are no benefits in making all libraries available in both environments. Not only that it will generally result in an increased code complexity, some features will sometimes not be shimmable resulting in an inconsistent API between platforms.