refactor grand module AngularJS config dans des fichiers séparés

Problème: Grand config()

La config de mon application AngularJS est de plus en plus assez grand. Comment feriez-vous pour refactoriser le code suivant dans des fichiers séparés?

//app.js
angular.module('myApp')
    .config(function($urlRouterProvider, $stateProvider, $httpProvider) {
        //Configure routing (uiRouter)
        $urlRouterProvider.when('/site', '/site/welcome');
        $stateProvider.state('main', ...
        ...

        //Configure http interceptors
        $httpProvider.interceptors.push(function () {              
            ...
        });
    });

L'Option 1. Plusieurs config()s

Je sais que je peux avoir plusieurs config()s et de les placer dans des fichiers séparés comme ceci:

//app.js
angular.module('myApp');

//routerConfiguration.js
angular.module('myApp')
    .config(function($urlRouterProvider, $stateProvider) {
        //Configure routing (uiRouter)
        $urlRouterProvider.when('/site', '/site/welcome');
        $stateProvider.state('main', ...
        ...

//httpInterceptorConfig.js
angular.module('myApp')
    .config(function($httpProvider) {
        //Configure http interceptors
        $httpProvider.interceptors.push(function () {              
            ...
        });
    });

Ce que je n'aime pas à propos de cela, c'est que dans l'original app.js, il n'y a aucun moyen d'en obtenir une vue d'ensemble de ce qui est exécuté au démarrage.


L'Option 2. Injecter quelque chose

Je préfère faire quelque chose de ce genre, car il serait plus facile de voir ce qui est configurée, directement dans le app.js. Cependant je sais que ce n'est pas possible, puisque l'on ne peut pas injecter des services en config().

Puis-je utiliser les fournisseurs de résoudre ce problème? Est-il un meilleur moyen?

//app.js
angular.module('myApp')
    .config(function(routerConfig, httpInterceptorConfig) {
        routerConfig.setup();
        httpInterceptorConfig.setup();
    });

//routerConfig.js
angular.module('myApp')
    .factory('routerConfig', function($urlRouterProvider, $stateProvider) {
        return {
            setup: function() {
                //Configure routing (uiRouter)
                $urlRouterProvider.when('/site', '/site/welcome');
                $stateProvider.state('main', ...
                ...
            }
        };
    });
});

//httpInterceptorConfig.js
angular.module('myApp')
    .factory('httpInterceptorConfig', function($httpProvider) {
        return {
            setup: function() {
                //Configure http interceptors
                $httpProvider.interceptors.push(function () {              
                ...
            }
        };
    });
});

source d'informationauteur Joel