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

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

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

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

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

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

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

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

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

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

1 ответ

Решение

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

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

watch:
  options: spawn: false

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

Другие вопросы по тегам