chore(docker): cache npm dependencies separately