Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Module versioning, dependency management, and more ... #4574

Closed
FredericLatour opened this issue Apr 2, 2020 · 42 comments
Closed

Module versioning, dependency management, and more ... #4574

FredericLatour opened this issue Apr 2, 2020 · 42 comments

Comments

@FredericLatour
Copy link

First of all, kudos for what sounds like a great project.
Using exclusively typescript for years, I'm quite excited of being able to use Deno in the future.

Now, I just don't get how it is possible to develop apps at a meaningful scale without a proper module system. I had already shared my concerns once on discord but was not expecting that a 1.0 would be released without any meaningful work in this area.

Because it sounds like Deno approach seems to be influenced by Go on this matter, let me copy and paste an extract from the Go documentation:

Eight years ago, the Go team introduced goinstall (which led to go get) and with it the decentralized, URL-like import paths that Go developers are familiar with today. After we released goinstall, one of the first questions people asked was how to incorporate version information. We admitted we didn’t know. For a long time, we believed that the problem of package versioning would be best solved by an add-on tool, and we encouraged people to create one. The Go community created many tools with different approaches. Each one helped us all better understand the problem, but by mid-2016 it was clear that there were now too many solutions. We needed to adopt a single, official tool.

What's the point of going into the exact same pain points. Why not learning from this experience and avoiding a sure mess to come?

At the very least a proper module system should make it possible to handle versioning and dependency management.

Now is a central repository important or not? Honestly, I'm not really fond of everybody hosts it's publicly available modules in its own git repository because, as a developer, either you are not able to refactor your repository organisation or you will break module installs for everybody relying on your repository. Alternatively, if you do not want to face this dilemma, you will come up with a specific github repository where you publish your modules in order to mimic a "kind-of" group/dev/company central repository.
I tend to believe that a central repository has its use for public modules discoverability and repeatable installation paths but I have no religion on the subject. In the same time, the ability to import modules outside of a central repository (especially when private modules are concerned) is a must have as well.

I'm really interested to read how you guys are seing the development workflow of a reasonably sized app that depend on publicly available modules + internally developed modules with the current Deno module approach.

@Soremwar
Copy link
Contributor

Soremwar commented Apr 2, 2020

First of all, NPM is pretty much a repository as well. The idea behind Deno is to simply not limit yourself to one single repository (as Node does) for your entire project, in pros of not being dependant of a private company like NPM is.

Package Managers should be really a configurable option (again not really the case in Node since it all gets pulled from NPM) and Deno offers that option. Deno not choosing one as their default but relying in the JavaScript native module system is a smart move.

Doesn't mean you can't have a Package manager in Deno. Most likely a way to pull NPM modules directly will be written shortly after 1.0 release.

Now on the question of how it goes for me using this approach, it works just fine. I commonly avoid using non-vital libraries anyway. One particular experience I had was using a dependency that got broken under the last version of Deno. I fixed it in my local fork of the lib and then pulled from there while waiting the PR to merge with the lib source. Not the best example, but I could effectively replace a whole lib with a newer version without much a hassle just by changing its URL. Cases where NPM just randomly drops packages may find its solution here.

Also and I said this some time ago while talking on how I deployed my app with Deno.
Deno architecture

@lucacasonato
Copy link
Member

First of all, kudos for what sounds like a great project.
Using exclusively typescript for years, I'm quite excited of being able to use Deno in the future.

😄

Now, I just don't get how it is possible to develop apps at a meaningful scale without a proper module system. I had already shared my concerns once on discord but was not expecting that a 1.0 would be released without any meaningful work in this area.

Because it sounds like Deno approach seems to be influenced by Go on this matter, let me copy and paste an extract from the Go documentation:

Eight years ago, the Go team introduced goinstall (which led to go get) and with it the decentralized, URL-like import paths that Go developers are familiar with today. After we released goinstall, one of the first questions people asked was how to incorporate version information. We admitted we didn’t know. For a long time, we believed that the problem of package versioning would be best solved by an add-on tool, and we encouraged people to create one. The Go community created many tools with different approaches. Each one helped us all better understand the problem, but by mid-2016 it was clear that there were now too many solutions. We needed to adopt a single, official tool.
What's the point of going into the exact same pain points. Why not learning from this experience and avoiding a sure mess to come?

At the very least a proper module system should make it possible to handle versioning and dependency management.

Go's modules are different from ours - specifically they are not standard URLs. I can not just host a Go module on my http server easially. Go's packages are hosted in version control systems and the Go tool uses these version control systems directly (git, mercurial ect). Go is actually very opinionated about how it deals with modules - it only supports those version control systems (there's more, I know, but to advanced for now). Go does a lot of magic under the hood to resolve an import, like cloning the repo, checking out a certain branch, ect. Go was not designed with advanced versioning in mind - you can see this in the very simple import statements. It's very opinionated go get tool did not have the ability to check out a certain git tag, branch or commit. That is what Go's modules solved.

Deno is completely different - it has exactly 0 opinions or reliance on anything other than HTTP. Deno requests its modules via HTTP. How the identifier (URL) looks is completely up to the implementer. Deno does not have the problem of 'not being able to lock to a certain commit' for example, that for Go, tools like godep solved before Go modules existed. Because Deno has no understanding of what Git is, it doesn't need to have any understanding of commits and versions either and problems like these are completely non existent. In Deno, the module identifiers include all information you want them to include (version, path, repository - you can decide because you structure how your server handles incoming requests from Deno). All information that for Go is spread across multiple places (the import statement and the version info in go.mod) is all contained inside of the module identifier (URL).

Now is a central repository important or not? Honestly, I'm not really fond of everybody hosts it's publicly available modules in its own git repository because, as a developer, either you are not able to refactor your repository organisation or you will break module installs for everybody relying on your repository. Alternatively, if you do not want to face this dilemma, you will come up with a specific github repository where you publish your modules in order to mimic a "kind-of" group/dev/company central repository.

This is where URL redirector services like deno.land/x, denolib.com, pika.dev, jspm.io, ect come in. They provide a layer of abstraction so you don't have to worry about not being able to restructure your repo.

I tend to believe that a central repository has its use for public modules discoverability and repeatable installation paths but I have no religion on the subject. In the same time, the ability to import modules outside of a central repository (especially when private modules are concerned) is a must have as well.

Again see point above, redirector services like deno.land/x or pika.dev solve this. Also do you actually use NPM's built in search? If I need something I use Google to find it, not NPM's search. I really don't care if that sends me to Github, deno.land/x or pika.dev.

About the repeatable install: In NPM's case you are just trusting NPM Inc. that they will pay for their server equipment, won't shut down in your country or territory, serve you non malicious packages, not delete the package you are using, ect. This is all about trust & reliance on a single party. If NPM goes bankrupt tomorrow and their registry shuts down all of your builds will fail. It's a single point of failure.

I'm really interested to read how you guys are seing the development workflow of a reasonably sized app that depend on publicly available modules + internally developed modules with the current Deno module approach.

There are tools to make your life easier. For example, hayd's udd.

One more thing

Deno tries to be compatible with the web where it can. Using a different module format from the web does not work if you are trying to be compatible. URLs have worked fine for the browser for the last 20 years, and it's not a battle between many competing centralized repositories either right? Why does Deno need one, and why would this happen?

Deno can work with whatever registry you want it to work with because it is not opinionated.

@hayd
Copy link
Contributor

hayd commented Apr 2, 2020

Now, I just don't get how it is possible to develop apps at a meaningful scale without a proper module system.

Why don't you consider ESM a "proper module system"?

Versioning is critical and IMO it's important that libraries and users reference immutable urls (rather than pointing to "master")... that's really a "problem" with urls in general but can be a guarantee of a repository (see also #200 / --lockfiles). Generally git tags or npm releases are what are being used atm.

@FredericLatour
Copy link
Author

@Soremwar The question is not how it goes for you specifically but how you guys are seeing:

the development workflow of a reasonably sized app that depend on publicly available modules + internally developed modules with the current Deno module approach.

Now if you are not developing with a team, and do not rely on any versioned open source or internal module dependencies, the simpler the better but it's a very specific use case.

  1. I have nothing against not relying on a single repository. I even wrote that this is a must have.
  2. You are not really fair with Npm and Node. You are not relying on a central repository only. Not only you can have a private repository but also have modules that are in github repositories or in local folders (ie: "@types/mysql2": "file:./local_mod/mysql2",)
  3. At this time, Deno is not proposing anything for versioning and dependencies management and this is an important concern.

@hayd hayd mentioned this issue Apr 2, 2020
43 tasks
@kitsonk
Copy link
Contributor

kitsonk commented Apr 2, 2020

Duplicate of #3654, #4291, #3896, #3861, #213, #195, #47, #3777, #1397, #200, #170

@Soremwar
Copy link
Contributor

Soremwar commented Apr 2, 2020

That will do @kitsonk

@hayd
Copy link
Contributor

hayd commented Apr 2, 2020

At this time, Deno is not proposing anything for versioning and dependencies management and this is an important concern.

However there are best practices (that you'll see in many deno libraries):

  • import from "immutable urls" (aka urls with versions in the url, you can check your dependency tree for rogue urls - who themselves reference unversioned urls).
  • group your dependencies in a deps.ts file e.g. like this one.

@lucacasonato
Copy link
Member

lucacasonato commented Apr 2, 2020

At this time, Deno is not proposing anything for versioning and dependencies management and this is an important concern.

Yes it does - Deno's proposal for version & dependency management is the exact same as the browsers. The URL is a (preferably immutable) reference to the module you are importing, and that reference can include a version.

Part of this is also Deno having built in support for lock files. https://deno.land/std/manual.md#lock-file

@FredericLatour
Copy link
Author

And how I can answer those concerns:

  • Are there any "security concerns" with the version of the modules I'm currently using? And do the module I'm using relies on modules with security concerns?
  • How far I am lagging from current version ?

@lucacasonato
Copy link
Member

lucacasonato commented Apr 2, 2020

  • Are there any "security concerns" with the version of the modules I'm currently using? And do the module I'm using relies on modules with security concerns?

deno info + redirector services like pika.dev can show this kind of info. Also Github could do this with their security audits feature. This could also be integrated in something like udd.

Go doesn't have this either.

How far I am lagging from current version ?

Try @hayd's udd.

@kitsonk
Copy link
Contributor

kitsonk commented Apr 2, 2020

What security checks are in Node.js or npm? None... All the security auditing for modules is an add on to the eco-system. Having a package manager and a centralised registry have lulled people into a very false sense of security.

@lucacasonato
Copy link
Member

What security checks are in Node.js or npm? None... All the security auditing for modules is an add on to the eco-system. Having a package manager and a centralised registry have lulled people into a very false sense of security.

Also your trusting a single party to give you correct information - not the best bet for security. The best security is the one that is distributed and where nobody is trusted (e.g blockchain).

@FredericLatour
Copy link
Author

@kitsonk I don't get it. Yes, the security auditing is an add on and then?
@lucacasonato Well, we are always trusting people to some extent. Security is always a balance.

@kitsonk
Copy link
Contributor

kitsonk commented Apr 2, 2020

I don't get it. Yes, the security auditing is an add on and then?

So why are you suggesting the Deno needs to deliver it before 1.0, or even have an opinion about it? Why isn't it acceptable to be addressable by the wider community?

@lucacasonato
Copy link
Member

I don't get it. Yes, the security auditing is an add on and then?

Deno is the core, add ons can be developed separately. Google doesn't develop all Chrome extensions either. Third parties do.

Well, we are always trusting people to some extent. Security is always a balance.

I prefer not trusting a single for profit org that holds all of the worlds node packages. Up to you. Should not be forced on the user, they should choose.

@jooola
Copy link

jooola commented Apr 2, 2020

Was wondering how reproducible builds are handled ?

Will there be any kind of lock file somewhere regarding the imported libraries versions ? What I understand from the previous messages, we can't trust anyone, so how can we be sure the version we used yesterday hasn't changed in the mean time ?

@FredericLatour
Copy link
Author

@hayd
I think I'm starting to understand the approach. I guess I have to re-read a couple of things and check deno-udd.
Maybe it can work after all.
And how about the version in the URL. Doesn't leaving the version scheme for anyone to decide can make it difficult in the long run?

@lucacasonato
Copy link
Member

Was wondering how reproducible builds are handled ?

Will there be any kind of lock file somewhere regarding the imported libraries versions ? What I understand from the previous messages, we can't trust anyone, so how can we be sure the version we used yesterday hasn't changed in the mean time ?

There is: https://deno.land/std/manual.md#lock-file

@hayd
Copy link
Contributor

hayd commented Apr 2, 2020

There is transparency in the dependency tree (deno info)... so you can at least enumerate.

And do the module I'm using relies on modules with security concerns?

Security concerns is a much harder problem... and not solved by anyone/any language (yet?). But crev seems promising... https://github.com/crev-dev/cargo-crev

Your best bet: minimize dependencies and review them. 🤷‍♂

Doesn't leaving the version scheme for anyone to decide can make it difficult in the long run?

My bet is libraries and repositories that choose sensible version schemes will be the most popular!

@kitsonk
Copy link
Contributor

kitsonk commented Apr 2, 2020

Doesn't leaving the version scheme for anyone to decide can make it difficult in the long run?

Versus having a single private company dictate it to you?

Deno just doesn't have opinions about it. It moves the semantic meaning elsewhere. https://deno.land/x/ supports gittable entities, like tags, branches, and commit IDs. That is sufficient in most cases.

@FredericLatour
Copy link
Author

FredericLatour commented Apr 2, 2020

@kitsonk

Versus having a single private company dictate it to you?

You are so negative :)
I was thinking versus having a sensible recommendation from the team developing Deno so that everybody uses the same approach.

@nayeemrmn
Copy link
Collaborator

Regarding the idea of "if Deno doesn't endorse one solution the community will create too many" -- "too many solutions" is only bad when you require that your dependencies are using the same solution, like a package.json-like dependency network, and interop is ugly. Things like udd are strictly local tools to help update your URLs. There could be 1000 of them and it would still be anything but a "sure mess", talk about being negative :) Just separate projects using different methods to solve internal problems.

@kitsonk
Copy link
Contributor

kitsonk commented Apr 2, 2020

Life of Brian

The analogy I have used before is Deno is like a browser for JavaScript code. The browser doesn't dictate to you how to structure your website to have good usability, and what good usability for a website is has evolved over the years. So dictating conventions too early, and having your "browser" dictate those conventions are likely bad things.

Part of it is the concept of making decisions at the Last Responsible Moment. Why dictate a version scheme, until there is a real world problem where a good semantic versioning scheme would be a solution to it. I personally haven't seen that problem be a real problem yet, at least not to the point of having to bake that concept into the runtime.

@FredericLatour
Copy link
Author

FredericLatour commented Apr 2, 2020

@kitsonk Well, I'm not really buying your example.
Why bother providing a formater or a linter, test tools, etc ...? I know you will say that no one is forced to use them.

But providing those tools out of the box has obvious great advantages:

  • Those tools solve legitimate needs for development and are there to be used
  • Because most people will use those tools instead of other tools, you will mostly have the source formatted the same way and you won't have to learn 12 new tools each time you move to an existing Deno project.

Following the same approach Deno's team could come up with a non mandatory recommended approach and tools for handling in the easiest possible way versioning and dependencies.

Yes, I know The life of Brian. We are indeed individuals but we have to follow common patterns when working together.

That being said, I learned a couple of things and have to do my homework and read a couple of additional information.

If you ask me, a chapter on versioning and dependency management the Deno way would be more than welcome. We are all coming from a package manager based environment. The mental shift is not obvious at first sight.

@Soremwar
Copy link
Contributor

Soremwar commented Apr 2, 2020

As I stated before, Deno provides this tools cause JS doesn't have a native implementation for them. However it does have a native implementation for modules that's been around for quite a while now

Because most people will use those tools instead of other tools, you will mostly have the source formatted the same way and you won't have to learn 12 new tools each time you move to an existing Deno project.

These tools for Deno are aiming not to be opinionated but configurable by the community. A package manager would likely be opinionated on where to fetch the dependencies.

Deno test library can be forked by another person to offer a different approach or different functionality, that's why it's an std/ library instead of built in Deno

For linting and formatting you could dictate your own directives, so there's no point on argue about that

Is all about giving people the freedom to do whatever they want. Don't lean on nothing but Deno and you are just as good as if you were leaning on external tools

@FredericLatour
Copy link
Author

@Soremwar Come on. There are already plenty of tools for formatting, linting, testing in the JS/TS world.

Once again, I'm not sure what you are trying to say. Except for formatting tool, my argument is not about being opinionated but having a set of tools that will certainly be used in most cases. Having an agreed set of tools (even configurables one) will make life easier for the reason I mentioned previously.
I don't get the forking argument either. I could fork Deno as well I suppose?

And I have not heard that there were any concerns for versioning and integrity in the js module system. If you came up with locks file, udd and such it's for a reason. Js modules per se are not enough without at least some conventions and at least a couple of tools to handle those legitimate matters (except for you if you are the only developer and does not rely on any modules).

@FredericLatour
Copy link
Author

FredericLatour commented Apr 2, 2020

Ok, thanks guys for the additional information. I was obviously missing some bits.
We'll see anyway how this work all together soon.
I propose to close this issue as this was mostly a debate/discussion.

@nayeemrmn
Copy link
Collaborator

I'm not sure why Deno having a built-in formatter is reasoning to suggest it should have a built-in dependency manager. They're not the same thing. With formatters etc. you can look at the existing ones, observe that they all do pretty much the same thing and, well... add a formatter. With centrailised dependency management (or specifically all of those little things you say it provides which should really be discussed individually 😬) you just have an existing bad solution. That's why we have one and not the other, even though we don't need either.

@FredericLatour
Copy link
Author

@nayeemrmn I can't see where you get that I suggested that having a built-in formatter implies that it should have a dependency manager

Following the same approach Deno's team could come up with a non mandatory recommended approach and tools for handling in the easiest possible way versioning and dependencies.

I can't see any mention of a dependency manager and even less a centralized one.

With centrailised dependency management (or specifically all of those little things you say it provides which should really be discussed individually 😬) you just have an existing bad solution. That's why we have one and not the other, even though we don't need either.

Must feels good to get it right when all other languages and environment get it wrong :)

@nayeemrmn
Copy link
Collaborator

I can't see any mention of a dependency manager and even less a centralized one.

I can, here and there in earlier comments. I maybe conflated things though.

Must feels good to get it right when all other languages and environment get it wrong :)

Language is fixed, one other environment.

@hayd
Copy link
Contributor

hayd commented Apr 2, 2020

I think it has been a good discussion and worth having.

If you ask me, a chapter on versioning and dependency management the Deno way would be more than welcome

👍

It does, and will, come up a lot so maybe it'd be good for an FAQ? We will want to be careful in not picking a winner and perhaps outlining strategies with pros/cons. That said, it feels like there is broad agreement RE always using versioned urls. (importmaps vs deps.ts vs inline imports are note worthy.)

@FredericLatour
Copy link
Author

@nayeemrmn

I can, here and there in earlier comments. I maybe conflated things though.

Here is what I'm saying in my initial post:

I tend to believe that a central repository has its use for public modules discoverability and repeatable installation paths but I have no religion on the subject.

Then 2 hours ago answering Andy Hayde:

I think I'm starting to understand the approach. I guess I have to re-read a couple of things and check deno-udd.
Maybe it can work after all.
And how about the version in the URL. Doesn't leaving the version scheme for anyone to decide can make it difficult in the long run?

Honestly, you mixed it up. Doing a parallel with all the non mandatory tools provided, I was suggesting that it would be a good idea that Deno team comes up with a set of (even non mandatory) convention/approach/tools (and in a way ti's already the case with locks-file generation) toward versioning and dependencies concerns.

@FredericLatour
Copy link
Author

@hayd
Yes a FAQ section that explains it for the ones coming from a centralized package manager world .... well nearly every one :)

Yes, I get that you don't want to come up with a definitive approach. At the same time there are developers that don't really want to think about those cross cutting concerns more than necessary. Not necessarily because they would not be smart enough but because they already have complex business models and services to deal with. They don't really care an approach or another as long as it solves the usual concerns with module versioning and dependencies.

At the very least, proposing one way (combining a set of convention and tools like udd or whatever) and showing the workflow associated will help approaching Deno.

@samuelgozi
Copy link

Im just here to say that I agree with the decision made by the Deno team. A dependencies manager should be a separated project, and should not be rushed. Maybe something like Cargo(rust) should be more than enough. And it should be separate from the Deno binary.

@Jack-Works
Copy link

Jack-Works commented Apr 2, 2020

Just a small question. Why don't we use importMap JSON as the package.json for deno? It's web compatible.

For example, deno install https://pika.dev/lodash lodash to create/update an import map, store the final URL and map it to the name "lodash" in the import map and create a lock file for that to create a reproducible build.

@somombo
Copy link

somombo commented Apr 2, 2020

I'm curious what @ry and others think of Go Modules ... and whether it is possible/desirable to adopt that style of dependency management (or some aspects of it) for Deno (either before v1 or even afterwards - I personally wouldn't mind either)

The reason why Go team didn't initially have dependency baked in was they wanted to take time to research alot of common pitfalls you find in systems like npm, cargo, and even godep.

The Minimal Version Selection algorithm is one of the key ingredients that sets Go module system apart from the rest in this respect. It's used to basically guarantee reproducible builds.

Here are some great talks that describe these features and issues in some detail:

@musab
Copy link

musab commented Apr 2, 2020

I do plan to present Deno 1.0 to my team.

But when that inevitable "how does dep management work" question comes up, it would help if we had a Deno way FAQ/tidbit I can read from.

Currently my response will be give or take, dep management is handled the way Browsers handle it, that it doesn't care as long as it's via HTTP to a URL in the form of a package@ver. In other words no built-in tools

That's a tough pill to swallow for a lot of people.

@Nezteb
Copy link

Nezteb commented Apr 2, 2020

Sensible requirements in order of implementation date: (my opinion)

  1. Deno should have an FAQ page that addresses the dependency management question. Even if it's just "Deno does not handle dependency management, you have to do it yourself, see this GitHub issue for details".
  2. Deno should establish best practices for package management when rolling your own, preferably with many examples.
  3. If the Deno team is not willing to commit to it, someone in the community will have to create a third-party package manager or somehow re-use an existing one from other runtimes/languages.
  4. The Deno team would ideally eventually build it's own package manager tool that is separate from the Deno binary/runtime.

I don't think the Deno binary/runtime or the Deno team themselves should be responsible for implementing package management, but if they did it would be a huge boon to the present and future community. I look to languages like Rust/cargo, Elixir/mix, Elm/elm, Nim/nimble as good examples of package management tooling done well.

@hayd
Copy link
Contributor

hayd commented Apr 2, 2020

I agree with 1 & 2 and have an idea for a community tool... but it's kinda unclear to me what it's scope should/will be.

Personally I find deps.ts quite elegant so helping make writing those easier is key (add foo and it populates).

What do you think the criteria for "package manager" is for deno?

@FredericLatour
Copy link
Author

I closed this issue because I was unsure if it wasn't going to go into a war between "Deno is perfectly fine as of now - no need to add anything" vs "Hey .. what's up with versioning and dependencies?".

Now if this is going into discussing pragmatic concerns/features that can possibly help Deno team to shape something, I guess it could be reopened.

@silasdavis
Copy link

silasdavis commented May 11, 2020

Just to add a voice of a passerby with an eye on Deno. I agree whole-heatedly with @FredericLatour on this. The issue here is not about centralisation to a particular company/system but centralisation in terms of mind share around how package management is done. It's immaterial whether the artefacts or index is distributed (and that's all fine and good). There is just a huge bonus in reduced overhead by being somewhat opinionated about how versioning works and how a dependency graph is resolved that is consistent between dependencies.

The Go example is useful, and having lived through the best part of a decade of hand-wringing from the Go team over what turned out to be an essential feature; losing countless hours to the brokenness and fragmentation of Go dependency management (and of Go devotees exalting the but-you-don't-get-it greatness of vendoring dependencies) it's not something I would inflict on myself again.

from @Jack-Works:

Just a small question. Why don't we use importMap JSON as the package.json for deno? It's web compatible.

I think that is what people would inevitably start to do. Having a format to represent dependencies is only a small part of it though. You would also what tooling to resolve transitive dependencies to appropriate versions, deal with conflicts, and the such.

Something that is 80% optimal that 99% of the community use by convention is so much better than a 90% optimal community solution that 20% of the community use here such is the network effect with package management. It's also one of the things that most people coming to your ecosystem are likely to touch first and that that experience is likely to colour their opinion and adoption in general.

@KpjComp
Copy link

KpjComp commented May 17, 2020

I've been using Node for many years, I even remember watching Ryan on YouTube, I was inspired. It looks like Ryan has done it again, although in his recent YouTube videos he seems more nervous.. :) In his recent video were he talks about what mistakes he made with Node, I totally agree. Been able to share code between web & back-end is a real bonus.

But the web standard has it's own mistakes, and dependency management is one of them. That's the reason we have things like Webpack etc, and even now using the latest browsers and ES modules anything big still requires a bundler.

The thing is the the Web (front-end), is the final output. So any form of dependency is not required. But back-end solutions like Deno, this is not the case.

I think the solution here is very simple, Deno dev's need to take control here, not so much in coding, but just creating a standard, like maybe the @Version in the URL etc. Ryan said in his video he regrets ignoring the advice he got from the community, so please don't ignore this one. Deno has the potential to be a replacement for Node in so many ways.

So here is hoping the Dev's take control here..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests