2013-08-24 11 views
13

Sto usando Restangular in un progetto creato usando Gruntjs. Ecco un frammento:Configura Restangular.baseUrl usando Gruntjs

// scripts/app.js 

angular.module('myApp', ['restangular'])]) 
    .config(['RestangularProvider', function(RestangularProvider) { 

    /* this is different on dev, test, prod environments */ 
    var baseUrl = 'http://localhost:8080/sms-api/rest/management/'; 

    RestangularProvider.setBaseUrl(baseUrl); 
}]) 

Vorrei avere un valore diverso per baseUrl se specificato in CLI o un default se non specificato:

$ grunt server 
Using default value for 'baseUrl' 

$ grunt build --rest.baseUrl='http://my.domain.com/rest/management/' 
Using 'http://my.domain.com/rest/management/' for 'baseUrl' 

Come posso fare questo?

risposta

6

È possibile con l'aiuto di Grunt preprocess che è utile per la sostituzione (e altre cose) dei modelli all'interno dei file.

innanzitutto aggiungere questo ai vostri .js codice:

/* Begin insertion of baseUrl by GruntJs */ 
/* @ifdef baseUrl 
var baseUrl = /* @echo baseUrl */ // @echo ";" 
// @endif */ 

/* @ifndef baseUrl 
var baseUrl = 'http://www.fallback.url'; 
// @endif */ 
/* End of baseUrl insertion */ 

Poi nel file grugnito, dopo l'installazione di grugnito pre-elaborazione (cioè npm install grunt-preprocess --save-dev si aggiunge la seguente configurazione:

preprocess: { 
     options: { 
      context: { 

      } 
     }, 
     js: { 
      src: 'public/js/services.js', 
      dest: 'services.js' 
     } 
    }, 

ovviamente, è necessario aggiornare l'elenco di file js di conseguenza a tutti i file che si utilizzano. importante avviso - se si prevede di aggiornare lo stesso file (e non per una nuova destinazione), è necessario utilizzare l'opzione linea

Finalmente, al fine di lavorare con un command line config variable, aggiungere il seguente compito personalizzato il file grugnito così:

grunt.registerTask('baseUrl', function() { 
     var target = grunt.option('rest.baseUrl') || undefined; 
     grunt.log.ok('baseUrl is set to', target); 
     grunt.config('preprocess.options.context.baseUrl', target); 
     grunt.task.run('preprocess'); 
    }); 

Infine, eseguire l'attività baseurl in questo modo:

grunt baseUrl --rest.baseUrl='http://some.domain.net/public/whatever' 

Avviso ho messo in un URL fallback in modo da poter eseguire anche grunt baseUrl e gr unt imposterà il tuo baseUrl su quello definito.

+0

l'inserimento nel file .js è più complesso di quanto dovrebbe essere perché non mi piace Jetbrains per poi avvisarmi di tutti i tipi di cose inutili (come punto e virgola o qualsiasi altra cosa). Anche @echo ha avuto alcuni problemi per me, quindi invio manualmente la chiusura; *punto e virgola* –

Problemi correlati