I've been trying Deno on a personal project and it keeps impressing me more and more. If Deno continues to improve like this, I can see it being the future of JavaScript development. This might go against the grain nowadays, but I'm really productive with JavaScript/TypeScript and any innovation in this space is appreciated. I've had to deal with so much ESM crap these last couple of months and using Deno has been a refreshing change of pace.
Edit: I'm especially impressed with its dependency management. Import maps are a breeze and a welcome change to... whatever is going on in Nodeland. Like, I don't have to set up my imports both in tsconfig.json and package.json and walk this delicate tightrope to make sure that things don't just start breaking. With Deno's import maps it kind of just... works. I also love that I don't have to deal with a `node_modules` folder, and I can choose to vendor my dependencies if I'd like. It reminds me of the Go approach, which I really enjoy.
There's other things I like but these are the big ones. The more I can get switched over to Deno the better.
To be clear, I created this site quickly on Deno Deploy this weekend (I'm the author) and didn't bother getting a proper domain yet. Hacker news is cutting off the subdomain of david.deno.dev and this is just a personal post about the dprint CLI and dprint-plugin-prettier, which aren't available in Deno's CLI.
Deno does use some other Rust-based dprint plugins for deno fmt though and dprint-plugin-prettier uses an embedded Deno runtime with Prettier snapshotted in it. Also, Deno now has a similar built-in incremental formatting and linting as of 1.21 last week, so those subcommands finish almost immediately after the first run... though they were already very fast https://deno.com/blog/v1.21#incremental-formatting-and-linti...
Wow... this is so seamless I didn't even notice VSCode using `deno fmt` under the hood. I'm gonna have to double check to make sure I don't have Prettier running.
> This might go against the grain nowadays, but I'm really productive with JavaScript/TypeScript
Big number of people pointing out the quirks about a language and its ecosystem does not mean that they are not good in terms of productivity, it just means that they are just used a lot.
"There are only two kinds of languages: the ones people complain about and the ones nobody uses" — Bjarne Stroustrup
The complaining actually helps, such as the example you can see in the node.js ecosystem, better and better tools are being built every day, and also "better" alternatives like Deno (in quotes because IMHO it still needs to prove itself).
When Python also got big because of the ML uprising, there was a time that we saw a post complaining about it every day. Same was true for PHP like 10-15 years ago.
So don't feel the need to explain why you chose your stack unless you really want to. Languages don't have feelings, you can leave them and learn a new one if it helps you accomplish things.
I just spent the better part of an hour trawling through issues in the CRA, Webpack, and Axios github issues pages, pertaining to the webpack4 -> webpack5 (10/10/2020) release.
I do not believe there is willpower for institutional changes to the javascript ecosystem that exists on timelines of less then 5 years.
Yeah I recently went through something similar too. Spent a ton of time just digging through GitHub issues.
Basically I've been dealing with the ESM changes. Add in the TypeScript complexity and all of the sudden I've now spent hours debugging some obscure issue rather than being productive... I've debated moving away from Node.js altogether because of it but there's no real realistic alternatives right now (for frontend development/bundling using React/Remix).
I probably can't do any better, but the whole ESM migration has been completely mishandled. Even more infuriating is the response that things are working _as expected_... Hopefully Deno gains some traction and we can put this all behind us.
Honestly I'd ditch CRA and hit up Vite nowadays. You will have to deal with a few poorly made packages (e.g. from Amazon) but it is a breath of fresh air.
I'm using Vite for a small greenfield project. Perhaps it's the selection of packages I use, but setting up was rather painful.
Vite Vue + Typescript template run fine in dev mode but could not be built for production, thanks to a combination of an Vue issue and a tsconfig flag.
Node polyfills work on `yarn dev`, but throw "kn.nextTick is not a function" for production build. Apparently I have to use package `rollup-plugin-polyfill-node` instead of `rollup-plugin-node-polyfills`.
Now with all the setting up out of the way, it does feels good to have a dev server starting almost instantly, hot reload and full page reload stay constantly fast. Sometime though hot reload just fails and I had to manually reload the page, or manually remount the component I'm working on (by navigating back and forth) to see the changes.
It also feels like I'm not even using typescript but plain javascript. Vite would happily serve broken code and some errors will only be shown on `yarn build`. I lost a watch compiler essentially.
I wouldn’t really use my build/dev process to say my errors as they’re not parsed by vscode. I generally rely on either vscode inline type checking or a parsed tsc watch task that vscode generates automatically and helpfully displays the output of in my problems pane. Bundling and typechecking are different.
I’ve had none of these issues. `tsc` should work for you out of the box. It also uses Rollup for bundling, so there is no reason you can’t build production packages with it.
Until you get to testing, and c8, and you find that for some magic variation of ESM it’ll just count all lines as covered, regardless of whether there’s anything even on them (coverage for blank lines, yay).
Edit: I'm especially impressed with its dependency management. Import maps are a breeze and a welcome change to... whatever is going on in Nodeland. Like, I don't have to set up my imports both in tsconfig.json and package.json and walk this delicate tightrope to make sure that things don't just start breaking. With Deno's import maps it kind of just... works. I also love that I don't have to deal with a `node_modules` folder, and I can choose to vendor my dependencies if I'd like. It reminds me of the Go approach, which I really enjoy.
There's other things I like but these are the big ones. The more I can get switched over to Deno the better.