在 Gruntfile 中使用变量对象

Using an variable object inside a Gruntfile

我试图通过在 Gruntfile 中使用具有一组指定参数的变量对象来避免重复代码。如果声明不正确,我深表歉意,因为我不完全确定如何在 gruntjs 中创建对象变量。目标是在 sonarRunner 配置中使用 sonarProperties。在 if 块中,添加一些额外的行,在 else 块中,只需使用 sonarProperties。不幸的是我的语法不正确。这可能吗?我基于一个 gulpfile 并想做类似的事情。

gulpfile 示例:

const packageName = require('./package.json').name;
gulp.task('sonar', callback => {
  let sonarProperties = {
    // #################################################
    // # General Configuration
    // #################################################
    'sonar.projectKey': `microservice:${packageName}`,

    'sonar.sourceEncoding': 'UTF-8',
    'sonar.login': process.env.SONAR_TOKEN,

    // #################################################
    // # Javascript Configuration
    // #################################################
    'sonar.language': 'javascript',
    'sonar.sources': 'src',
    'sonar.tests': 'test',
    'sonar.javascript.lcov.reportPaths': 'coverage/lcov.info',
    'sonar.coverage.exclusions': 'src/**/*.spec.js',
  };

  if (process.env.SONAR_ANALYSIS_TYPE === 'pr') {
    sonarProperties = {
      ...sonarProperties, // #################################################
      // # Github Configuration
      // #################################################
      'sonar.pullrequest.provider': 'github',
      'sonar.pullrequest.branch': process.env.branch,
      'sonar.pullrequest.key': process.env.pr_numbers,
      'sonar.pullrequest.base': process.env.base_branch,
      'sonar.pullrequest.github.repository': process.env.repo,
      'sonar.scm.revision': process.env.sha,
    };
  }

这是我的 gruntfile 的相关要点:

sonarProperties: [{
    projectKey: 'microservice:<%= pkg.name %>',
    projectName: 'Microservice - <%= pkg.name %>',

    sourceEncoding: 'UTF-8',
    login: 'admin',
    password: 'admin',

    host: {
      url: 'http://localhost:9000/'
    },

    language: 'js',
    sources: 'js',
    tests: 'test',
    testExecutionReportPaths: 'test_coverage_reporter/report.xml',
    javascript: {
      lcov: {
        reportPaths: 'test_coverage/lcov.info'
      }
    },
  }],

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    sonarRunner: {
      analysis: {
        options: {
          debug: true,
          separator: '\n',
          sonar: (function() {
            if (process.env.SONAR_ANALYSIS_TYPE === 'pr') {
              return {
                ...sonarProperties
                moreParams: someData,
              };
            } else {
              return {
                // use just sonarProperties
              };
            }
          }())

        }
      }
    }

  });

我能够使用以下内容创建函数:

grunt.registerTask('sonar', function () {
  let sonarProperties = {
      // #################################################
      // # General Configuration
      // #################################################
      .. 
}

并从一开始就将其声明为回调作为 grunt 任务。