https://app.habitat.sh/#/pkgs/adam/redis/3.0.7/2016061320525...
Nix also has similar generators for rubygems, python, haskell and some other languages.
Nix's cargo integration is even cooler since cargo is already quite deterministic, you just put in a SHA of the final folder cargo creates with all the dependencies.
This mostly works, but occasionally you need to override the generated derivations to add implicit dependencies that npm doesn't capture, or otherwise tweak packages that rely on quirks of npm.
Using npm doesn't demonstrate repeatability, but you could just as easily build a given application from fixed, verified source in this step.
It's absolutely essential that a package manager constrain the environment in which builds are performed. Without it, the packages are doomed to be built in a nondeterministic manner and potentially tampered with.
Not exactly the same as vendoring dependencies, but it's a decent compromise in some situations.
Except the builds aren't at all repeatable in a meaningful way, judging by the example code on the home page. The 'do_build' function runs 'npm install'. This means that 1) the build container has network access (i.e. it's nondeterministic by definition) and 2) the declared dependencies do not fully describe the dependency graph. So, I really don't see how much it could possibly borrow from Nix if it threw out the most important part of it.