Нужно ли устанавливать параметры Grunt при запуске задачи, или я могу изменить параметры во время выполнения?

Я пытался найти лучший способ установить глобальные параметры для всех моих задач ворчания из задачи ворчания, но мне не очень повезло заставить все работать.

Мне интересно, компилируются ли задачи каким-то образом, чтобы они застряли с начальным значением параметра, или можно ли изменить параметры во время выполнения (во время выполнения задачи watch), и я просто что-то делаю неправильный.

Базовый вариант

Вот конкретная ситуация (обратите внимание, что Gruntfile написан на coffeescript). Я начинаю со следующей задачи:

sass:
    options:
        sourcemap: true
    compile:
        files:
            "css/style.css" : "sass/style.sass"

Что я пытаюсь сделать

Я хотел бы иметь возможность динамически устанавливать параметр исходной карты из другой задачи, например:

sass:
    options:
        sourcemap: '<% grunt.options('local') %>'
    compile:
        files:
            "css/style.css" : "sass/style.sass"

Задача наблюдения улавливает изменения и запускает задачу, чтобы соответствующим образом установить глобальную опцию.

watch:
    local:
        files: ['local.json']
        tasks: ['local']
    dist:
        files: ['dist.json']
        tasks: ['dist']

grunt.option('local', true) # Base declaration

grunt.registerTask( 'local', 'Local is true', () -> grunt.option('local', true) )
grunt.registerTask( 'dist', 'Local is false', () -> grunt.option('no-local') )

Я хочу, чтобы он был настроен так, чтобы любые задачи, которые запускаются после запуска задач «local» или «dist» (например, когда watch снова запускает задачу sass), использовали самое последнее значение моей «local» опции. Я пробовал несколько подходов, и этот показался мне наиболее многообещающим, но я пока не смог заставить его работать так, как ожидалось.


person nwalton    schedule 04.03.2014    source источник


Ответы (1)


По умолчанию grunt-contrib-watch запускает задачи как дочерние процессы. Эти дочерние процессы не разделяют контекст родительского процесса, поэтому изменения в конфигурации отсутствуют.

Самый простой способ — отключить нерестовые задачи с помощью:

watch:
  options: spawn: false

и задача наблюдения будет запускать задачи в том же контексте процесса.

person Kyle Robinson Young    schedule 05.03.2014
comment
Спасибо за объяснение. Я прочитал документацию по grunt-contrib-watch, но не заметил этой важной части информации и не связал ее со своей проблемой. - person nwalton; 06.03.2014