2013-08-24 4 views
13

Я использую Restangular в проекте, построенном с использованием Gruntjs. Вот отрывок:Конфигурирование Restangular.baseUrl с использованием 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); 
}]) 

Я хотел бы иметь другое значение для 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 */ 

Затем в файле хрюкать, после установки черновой Preprocess (т.е. npm install grunt-preprocess --save-dev добавить следующую конфигурацию:

preprocess: { 
     options: { 
      context: { 

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

очевидно, вам необходимо обновить список файлов js, в соответствии с которыми вы всегда используете файлы. important извещение - если вы планируете обновить один и тот же файл (а не к новому месту назначения), вам необходимо использовать опцию инлайн

наконец, для того, чтобы работать с 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' 

Обратите внимание, я положил в URL восстановления, так что вы можете также запустить grunt baseUrl и гр unt установит ваш baseUrl на ваш определенный.

+0

Вставка в файл .js более сложна, чем это должно быть, потому что мне не нравятся Jetbrains, чтобы предупредить меня обо всех видах ненужных вещей (например, в виде двоеточия или что-то еще). Кроме того, у @echo были некоторые проблемы для меня, поэтому я вручную выводил закрытие; *точка с запятой* –

Смежные вопросы