Нужно ли устанавливать параметры 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
и задача наблюдения будет запускать задачи в одном и том же контексте процесса.