What is the best way to load CommonJS modules as client-side JavaScript code in the browser?
CommonJS modules put their functionality in the module.exports
namespace and are usually included using require(pathToModule)
in a server-side script. Loading them on the client cannot work the same way (require needs to be replaced, asynchronousness needs to be taken into account, etc.).
I have found module loaders and other solutions: Browserify, RequireJS, yabble, etc. or ways to simply alter the modules. What do you consider the best way and why?
You could download one of these libraries to use CommonJS modules in the browser, in which case this chart would look different. In reality though, you'll probably be using webpack to bundle and transpile your JavaScript code before it runs.
CJS will not work in the browser. It will have to be transpiled and bundled.
It is not deprecated.
Thanks to some creative engineers, it is now feasible to use Node. js modules in browsers, but not directly. Being able to call Node. js modules from JavaScript running in the browser has many advantages because it allows you to use Node.
I have used RequireJS extensively in the past (implementation on BBC iPlayer in 2010) and it works well. It can handle CommonJS modules, but it needs an additional wrapper, which I find annoying.
If you want to use those modules in Node.js as well, you need to use RequireJS on the server side as well, which I don't like doing since it is not idiomatic Node.js JavaScript code.
I have used webmake and Browserify in the past year on a few projects. Initially, the compilation step put me off, but having used it extensively this year, I can say that this is not an issue.
Browserify has a watch function included, which works very well. Webmake can be hooked up to a watcher (such as watchr) or, you can use the webmake-middleware module, which can be used as part of an Express.js or connect application. This has the advantage that rather than compiling the JavaScript on each save, it is only compiled when you actually request it.
Connect makes it trivial to create a server (also static), so you could create a tiny static Node.js server to serve up your files if you want to develop your frontend without a backend.
Bonus: There isn't any need for a build script as you always deal with the built code.
Here is a comprehensive list of your current options ordered by their respective popularity (number of watchers) on GitHub:
Options for use of require() in the browser (Wayback Machine archive)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With