Angularjs 使用Gruntjs配置Restangular.baseUrl

Angularjs 使用Gruntjs配置Restangular.baseUrl,angularjs,gruntjs,restangular,Angularjs,Gruntjs,Restangular,我在使用Gruntjs构建的项目中使用Restanglar。以下是一个片段: // scripts/app.js angular.module('myApp', ['restangular'])]) .config(['RestangularProvider', function(RestangularProvider) { /* this is different on dev, test, prod environments */ var baseUrl = 'htt

我在使用Gruntjs构建的项目中使用Restanglar。以下是一个片段:

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

我怎样才能做到这一点呢?

有了它的帮助,文件中的模板(以及其他东西)就可以被替换了

首先将其添加到.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 */
然后在grunt文件中,在安装grunt预处理(即
npm安装grunt预处理--save dev
后,添加以下配置:

 preprocess: {
        options: {
            context: {

            }
        },
        js: {
            src: 'public/js/services.js',
            dest: 'services.js'
        }
    },
显然,您需要根据所使用的文件更新js文件列表。重要注意-如果您计划更新同一文件(而不是新的目标),则需要使用内联选项

最后,为了使用
命令行配置变量
,还要将以下自定义任务添加到grunt文件中:

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
,grunt会将您的baseUrl设置为您定义的baseUrl。

插入到.js文件比它应该做的更复杂,因为我不喜欢Jetbrains提醒我所有不必要的东西(比如分号或其他东西).另外@echo给我带来了一些问题,所以我手动输出了收尾;分号