One other practice is to stuff controllers, directives, etc in their own modules and inject those modules into your "main" one:
angular.module('app.controllers', []) .controller('controller1', ['$scope', function (scope) { scope.name = "USER!"; }]); angular.module('app.directives', []) .directive('myDirective', [function () { return { restrict: 'A', template: '<div>my directive!</div>' } }]); angular.module('app', [ 'app.controllers', 'app.directives' ]); Nothing is left in the global scope.
http://plnkr.co/edit/EtzzPRyxWT1MkhK7KcLo?p=preview