Загрузка происходит при первом обращении к шаблону.
Т.е. как только у вас компилируется шаблон с директивой, загружается шаблон этой директивы.
Чтобы сделать "жадную" загрузку шаблонов в продакшне используют $templateCache. Смысл в том, что при поиске шаблона сначала проверяется $templateCache на наличие шаблона с указанным именем (в случае с директивой имя == значению атрибута templateUrl).
Если он там есть, то он просто оттуда берется, иначе осуществляется попытка его загрузить.
mod.run(function($templateCahce) {
$templateCache.put('components/button/template.html', '<div></div>');
});
// Директива
return {
templateUrl: 'components/button/template.html',
...
}
В это примере ангуляр просто возьмет шаблон из кеша, который был установлен при старте программы.
Само собой, никто вручную шаблоны не вставляет в код. Для этого есть плагины для различным систем сборки, например
https://www.npmjs.com/package/gulp-angular-templat...