我一直在努力寻找从grunt任务中为我所有的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') )
我希望它配置为在“本地”或“dist”任务运行后触发的任何任务(例如watch
再次运行sass
任务时)将使用最近的值我的“本地”选项。我尝试了一些方法,这看起来最有希望,但我还没能按预期工作。
答案 0 :(得分:1)
默认情况下,grunt-contrib-watch会将任务运行生成为子进程。这些子进程不共享父进程的上下文,因此不存在对配置的更改。
最简单的方法是使用以下方法禁用产卵任务:
watch:
options: spawn: false
并且监视任务将在同一进程上下文中运行任务。