Larry Myers

Cover Image for Yes, you do need a build step

Yes, you do need a build step

I thought the post on the Deno blog, You Don’t Need a Build Step, was a great read. In my career as a software developer I’ve directly experienced the history recounted in this post. A lot of people forget that prior to Browserify we were stitching together custom shell scripts that depended on tools like YUI Compressor to minify our javascript. Bundling wasn’t even in the conversation yet (we just concatenated source files together in a defined order). The concept of a modules and dependencies was in it’s infancy (see: YUI, Dojo, GWT). State of the art was using self invoking functions and global object hierarchies to encapsulate logic. You had to be very careful about the order of your script tags to prevent dependency loading errors. Frontend development may be more complex now, but it is so much more productive compared to 15 years ago.

Along with that productivity boost came the build step. I believe webpack is one of the most important pieces of software to be developed in the past decade. It has had a profound and lasting change on how web applications are built. It took the concepts introduced by Browserify and Grunt and grew them into a large open source ecosystem. The sheer breadth of loaders for webpack is its superpower. The ability to import anything into the AST1 for bundling is a powerful feature that I’ve yet to see fully replicated by competing projects. I hope this isn’t ignored as people fret about build times.

Looping back to the Deno blog post there is a valid point being made. The complexity of the build pipeline for a modern web application has gotten overly complex. We got so proud of ourselves for dragging web development into the conversation around “serious engineering practices” that we’re now stuck with build and compilation times that rival J2EE projects from around 2004. We’ve lost sight of the reason we loved writing javascript in the browser is because seeing our changes just required reloading the page. It was a quick and satisfying feedback loop. Now we just hope that we did the hot module reloading ritual correctly and that we won’t have to restart the dev server. The layers of abstractions we’ve heaped on the DOM has made it difficult to do simple things like a form submit to the server. I’m optimistic that the Deno team will help push forward a new movement to rethink how frontend development can be productive without the daunting complexity.

I’m not convinced Deno will be the runtime that replaces node.js, but it’s a much needed alternative to open people up to the idea that the future of web development can be both productive and less complex compared to where we are today.

Footnotes

  1. Abstract Syntax Tree. The in-memory data structure that represents the imported modules and their dependencies on each other before webpack does its transforms and exports the bundle. Those of us with a CS background likely first encountered them in our compilers class.