2013-08-24 58 views
13

我在使用Gruntjs構建的項目中使用Restangular。這裏是一個片段:使用Gruntjs配置Restangular.baseUrl

// 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); 
}]) 

我想,如果在CLI或默認的規定,如果未指定有baseUrl不同的值:

$ 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' 

我怎樣才能做到這一點?

回答

6

這可能在Grunt preprocess的幫助下用於替換文件中的模板(以及其他內容)。

首先添加到您的的.js代碼:

/* 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 */ 

然後在你的呼嚕聲文件,安裝咕嚕預處理(即添加npm install grunt-preprocess --save-dev如下配置後:

preprocess: { 
     options: { 
      context: { 

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

明顯,您需要根據您使用的文件更新js文件列表。重要通知 - 如果你正在更新相同的文件(而不是一個新的目標),你需要使用inline選項

最後,爲了與command line config variable工作計劃,下面的自定義任務添加到你的呼嚕聲文件,以及:

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'); 
    }); 

最後,運行的baseUrl任務,像這樣:

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

通知我放在一個後備網址,所以你也可以運行grunt baseUrl和GR unt會將你的baseUrl設置爲你定義的那個。

+0

插入到.js文件比它應該更復雜,因爲我不喜歡Jetbrains然後警告我關於各種不必要的東西(如分號或其他)。另外@echo對我有一些問題,所以我手動輸出關閉; *分號* –