Загрузите узел 8.17.0 через gradle ТОЛЬКО если узел не установлен в системе - PullRequest
0 голосов
/ 07 мая 2020

Код в build.gradle:

node {
    version = '8.17.0'
    download = true
}

plugins{
    id "com.moowork.node" version "1.3.1"
}

Я добавил задачу ниже, чтобы получить установленную версию узла, и сделал задачу npm зависимой от этой задачи и использовал значение stdout при принятии решения о загрузке узел или нет, но блок узла, содержащий 'download = true', выполняется раньше всего и каждый раз пытается загрузить узел.

task execute(type: Exec) {
    commandLine 'node', '-v'
    standardOutput = new ByteArrayOutputStream()
    Set s = standardOutput.collect()
    ext.stdout =  {return s.getAt(0).toString()}
}

1 Ответ

0 голосов
/ 07 мая 2020

Сборка Gradle имеет три отдельных фазы : инициализацию, конфигурацию и выполнение. node { download = true } выполняется на этапе настройки, тогда как тело вашей задачи execute выполняется на этапе выполнения.

Чтобы вычислить результат на этапе настройки, вы должны изменить свою задачу execute в обычную функцию Groovy:

bash-3.2$ cat build.gradle
ext {
  nodeVersion = getNodeVersion()
}

def getNodeVersion() {
  def baos = new ByteArrayOutputStream()
  def execResult = project.exec {
    commandLine 'node', '-v'
    standardOutput = baos
  }
  return baos.toString();
}

task printNodeVersion {
  doLast {
    println(project.nodeVersion)
  }
}
bash-3.2$ ./gradlew :printNodeVersion

> Task :printNodeVersion
v13.12.0


BUILD SUCCESSFUL in 566ms
1 actionable task: 1 executed

Здесь я сохраняю версию узла в объекте расширения ext во время конфигурации времени и печатаю значение в задаче printNodeVersion во время выполнения времени.

Для вашего варианта использования вы должны вызвать функцию и проверить, равно ли возвращаемое значение «8.17.0» во время конфигурации времени. Если да, то двоичный файл node имеет версию 8.17.0, в противном случае двоичный файл узла имеет другую версию (или, возможно, узел отсутствует).

...