This post is about How Blog-Doc Lost 138 Dependencies.
Once in a while, a crazy idea installs itself in your mind, like Blog-Doc.
Blog-Doc is not only The Simplest Node.js CMS & SSG, but it's also The Best!
I know that my word is not enough to prove the above statement, but numbers and purpose are!
It all started with my tutorials about templating a Node.js app with EJS and turning it to a simple SSG with the ability to write content in Markdown.
Then, I decided to combine those tutorials just as a proof of concept, and this is how Blog-Doc was created.
I created over the years some websites, themes, plugins, web apps... but nothing like Blog-Doc!
Each time I work on it I learn something new and find an aspect that can be improved.
You can call me crazy, but it's like the code is asking to be better because it can!
A proof of concept
Since Blog-Doc was here, as an SSG, I had to prove that it can be used and modified in any way a developer wants to.
I was using 11ty with Nunjucks to generate the static version of my personal blog https://lebcit.github.io/.
So I've turned the back-end of my static site to Blog-Doc with EJS without any hesitation and it was an easy task to do.
I felt proud and victorious, with some tears in the corners of my eyes, after republishing my site with Blog-Doc.
It's not everyday that a developer's idea sees the light...
An SSG with a CMS
To build a static site with a Static Site Generator you should read a lot of documentation to understand how everything is related and dive for days in your IDE to structure the back-end just to output some HTML, CSS and JS.
Moreover, if you don't have some back-end knowledge, you will not be able to use it or spend hours over hours searching, reading and trying to get the job done...
Coming from a long journey as a WordPress developer to Node.js, I wanted any user without any coding knowledge to be able to use Blog-Doc.
Not only I created an integrated Content Management System for Blog-Doc, but I've also made it user-friendly.
Blog-Doc's administration is a front-end application, yes a front-end one, that can be protected like any other app so don't freak out.
With the CMS in place, I've written some articles about it by effectively using it for the task and it worked like a charm.
Again I felt more proud, without tears this time, especially since I'm not aware of any SSG having an integrated CMS.
Perfectionist by default
I'm the kind of person that doesn't sit and relax when the code works even if it's good, I'm always in the quest of improving.
One of my strict coding rules is that the console of the browser must not output a single warning or error, otherwise, the code isn't usable.
I was not satisfied by the design of Blog-Doc's administration so I've modified it completely to a more modern one using Tabler.
Then the tiny unhappy developer sitting in the back of my head said:
- "Really! Are you serious? Go find something else to be passionate about it, you're using a cannon to kill a fly!"
That time, he just remembered a meme about Node.js developers using a tremendous amount of modules to achieve simple tasks...
So the challenge took place! I had to reduce significantly the number of dependencies that Blog-Doc relies on and keep all of its functionalities!
With all due respect to the time and hard work of every developer who made a Static Site Generator with Node.js, including the previous versions of Blog-Doc, those are gasworks!
I offer my sincerest apologies in advance to each one of these developers, but an app is not supposed to be a gasworks...
To better understand what I'm talking about, I'll briefly share with you the research that I've made starting with the last previous version of Blog-Doc.
N.B.: The last previous version of Blog-Doc can be found under the following GitHub repository https://github.com/LebCit/blog-doc-space.
To get the size of a node module, you can visite BUNDLEPHOBIA
To visualize the dependencies of a node module, you can visit:
The dependencies of Blog-Doc were as follows:
Looking at the
package.json file of Blog-Doc, a Node.js novice would say that it has 7 dependencies, an amateur would say that it has 52 dependencies after looking to the direct dependencies shown on each dependency page on NPM, but an advised user would click on each direct dependency to see if it also relies on other dependencies.
This is of course a time killer and this is why tools like visualization of npm dependencies exist.
To spare you the time, after looking at each dependency, Blog-Doc had 145 dependencies and this is not acceptable!
Some of them may stop being maintained or incompatible with other packages and I'll find myself debugging, losing time and energy over a gasworks that was never intended to be one...
Looking at the most used rendering frameworks, I've searched the number of dependencies of each one and was completely shocked:
- Astro ---> 450
- SvelteKit ---> 26
- Next.js ---> 26
- Docusorus ---> 1009
- Remix ---> 1
- Nuxt ---> 592
- Eleventy ---> 210
- Gatsby ---> 1246
Do you think that this is normal?!
I think that this is insane!
From my point of view, Remix is the only one in the list that is usable but I'm not a fan at all of JSX or JS front-end frameworks.
Long story short
After a long week of research, I've concluded that Blog-Doc dependencies could be reduced to 7 and 7 only!
That's great news, but now I had to rebuild Blog-Doc from the ground up.
Once done,with a much better code organization, I was surprised to see that I'd written much less code compared to the last previous version.
At this point, the little man in the back of my head said:
- "Knowing that I'm still unsatisfied, May The Code Be With You!"
The actual dependencies of Blog-Doc are as follows:
As you can check it out by yourself with ease, Blog-Doc is now relying on only 7 dependencies to output your static site.
You can find the newest version of Blog-Doc under its GitHub repository https://github.com/LebCit/blog-doc.
The little unsatisfied man in the back of my head intends to:
- Reduce the number of dependencies Blog-Doc relies on.
- Enhance Blog-Doc's administration and functionalities.
- Create a design without any CSS framework.
- Use TinyMCE instead of TOAST UI Editor.
- Improve, improve and improve 😉
Because ALL YOU NEED IS LESS!