DEV Community

Cover image for Why deps.ts and mod.ts is BAD in Deno

Why deps.ts and mod.ts is BAD in Deno

WJH on June 09, 2020

If you read the official Deno manual, you'll notice that the author advices you to contain all dependecies into one file. Similarly, if you're cre...
Collapse
 
zorbyte profile image
zorbyte

The removal of deps.ts and mod.ts works well with a module alias file. I use module aliases for my dependencies and for folders in my projects (e.g. if I had a utils folder with a logger in it I would configure an alias to use @utils/logger.ts)

Collapse
 
tobiassn profile image
Tobias SN

I mean, if you have a dependency, I think there’s a pretty high chance you’re gonna use it somewhere, so it’ll be compiled anyway.

Collapse
 
wongjiahau profile image
WJH

So are you saying if I import A from X, I'm going to use B, C, D, E, F, G, H anyway? If that is true, why would the lodash community wanted modularize lodash packages?

Collapse
 
tobiassn profile image
Tobias SN

No, I’m saying if you have B, C, D, E, F, G and H in there you’re gonna use them anyway.

Thread Thread
 
wongjiahau profile image
WJH

I don't disagree with that, but you have to know that this problem applies to every level of dependencies, so even if you're gonna use everything module, you cannot make sure that the author of the library that you're importing are going to utilize every functions that imported from the mod.ts of another library.
Eventually this creates a snowball effect, little by little, all those unused imports will take up a significant portion if not most of the compile time.

Thread Thread
 
tobiassn profile image
Tobias SN

I’m talking about modules, not functions. You are right that you can’t be sure that a dependency will use every function of all its dependency, but in most cases it won’t matter, as all the functions will be compiled no matter how many you use.

Collapse
 
oganexon profile image
oganexon • Edited

At first I wasn't convinced
But the idea of separating the dependencies while keeping the possibility to update them without doing it for each file is well thought-out

This pattern should be proposed to more people, in the end it doesn't bring any disadvantages.

EDIT: this is very time consuming, not recommended.

Collapse
 
artis3n profile image
Ari Kalfus

Anyone else wondering what happened between the end of this comment and the edit. What did this person see.

Collapse
 
wongjiahau profile image
WJH

Hi @oganexon , thanks for the reply. But I have a question for you, isn't longer compile time time-consuming too?

Collapse
 
oganexon profile image
oganexon

I meant to divide each dep in it's own file.
My module only does one thing and the cli has its own dep in the file so I already divided the deps
So overall I support your idea to provide a mod folder but not a deps folder

Thread Thread
 
wongjiahau profile image
WJH

True, I might have taken that way too far lol

Collapse
 
ievolved profile image
Shawn Bullock • Edited

Sometimes it might make sense. If your project is a bunch of functions that may or may not be used, this totally makes sense. But if you're project is something like Oak, then a fair amount of it will be wanted, and maybe other parts will be added on, and those dependencies can be isolated if needed.

Or if your project is an enterprise app, like mine, then you most likely want most, if not all, of the dependencies.

Compile time isn't a big deal (to me). It's a one time thing for each new launch. And such a decision imposes architecture which may or may not be what I'm looking for.

The compromise I've made in my public Deno libraries is to allow each major feature to be independently loaded, but also have a mod.ts that loads them all if someone so chooses. I tend to choose it.

Collapse
 
wongjiahau profile image
WJH

Compile time isn't a big deal

It's might be true for backend, but for frontend development, a fast feedback loop is very crucial, especially most of frontend developer's time is spent on styling and layout rather than logic.

Collapse
 
artis3n profile image
Ari Kalfus

You mention some compile time benchmarks you ran. I'd be interested if you'd add some examples to your article to highlight your point.

Collapse
 
wongjiahau profile image
WJH

Will the example provided in this repository helps? github.com/wongjiahau/deno-mod-ben...

Collapse
 
artis3n profile image
Ari Kalfus

Yup! Thanks