> node.js dependency hell
You have one file which lists your dependencies and it comes as a standard with the framework compared to Java & co where you have lots of flavours.
The amount of dependencies your dependencies have is up to your choice.
> Exception handling?
Synchronous code uses the standard try / catch method.
Asynchronous code has been using async / await combined with try / catch.
A strategy that Nose.js invented and that other languages like Java, Rust and Python copied.
> Performance?
V8 and Node.ja are pretty much the fastest dynamic language platform.
Years ago, when companies started switching to Node.js, a lot of companies actually reduced the amount of servers they used when switching from Java to Node.js
> No real multithreading afaik?
I/O is multithreaded through libuv and C-Ares.
The rest can simply run as a multi-process app.
Worker pools have also recently been introduced.
In any case that wouldn't be an issue for crawling which doesn't require multithreading.
JavaScript is the language used in the front-end so it seems like the most fitting language to use for crawling and scraping, especially since the introduction of headless browsers.