This is one of those "depends" questions, unfortunately.
Delivery: A website people visit rarely - strip things back to the lightest possible per-page load. Or at least isolate the really heavy stuff for the pages that need it.
A big application that people use daily - optimise for warm cache, don't fragment the files too much. Most strategies I've seen end up repackaging substantial amounts of repeated code into not-really-very-different payloads. Imagine a venn diagram where it's mostly crossover and very little unique - might as well just make one bit payload and take the hit.
Build: One file per component is a bit obvious; then a global payload and a per-view or per-section payload. Season with a preprocessor and concatenate to taste.
And a thought: The rules are going to change with http2, as well. I think we'll see a resurgence of plain old CSS @import and small files. Because why not? We only concatenated because connections were expensive in your performance budget.