Closest I found was to pin the nix-channel entirely, but not different components to different versions.
let pinnedPkgs = import (builtins.fetchTarball {...}) {}; node = pinnedPkgs.nodejs-10_x;
https://nixos.wiki/wiki/FAQ/Pinning_Nixpkgs
I've mostly stuck to nix-shell -p foo bar baz to setup my environments. It's holding me back and I should pull the trigger on a shell.nix file, just gotta learn the language.