可以将grunt-respect配置为运行监视任务的子集而不是所有任务吗?

时间:2013-04-11 15:25:14

标签: watch gruntjs

我正在使用gruntjs来构建我的js应用程序。我的grunt文件设置为运行两个单独的构建,其中80%的代码对于两者都是相同的,并且根据构建我们包括其他文件并排除一些文件。

我有咕噜声设置正确运行两个不同的版本,除了我不能告诉grunt-respect多次运行。

regarde:
  coffeeScripts:
    files: ['app/scripts/kiosk/*.coffee', 'app/scripts/*.coffee'],
    tasks: ['coffee:compileKiosk', 'livereload']
  stylusScripts:
    files: ['app/css/kiosk/*.styl', 'app/css/*.styl'],
    tasks: ['stylus:compileKiosk', 'livereload']
  coffeeScriptsWeb:
    files: ['app/scripts/web/*.coffee', app/scripts/*.coffee],
    tasks: ['coffee:compileWeb', 'livereload']
  stylusScriptsWeb:
    files: ['app/css/web/*.styl', 'app/css/*.styl],
    tasks: ['stylus:compileWeb', 'livereload']

我希望能够执行类似于以下任务的操作,但只会运行第一个regarde任务,而忽略第二个任务。

grunt.registerTask 'watchKiosk', ['livereload-start', 'regarde:coffeeScripts', 'regarde:stylusScripts']
grunt.registerTask 'watchWeb', ['livereload-start', 'regarde:coffeeScriptsWeb', 'regarde:stylusScriptsWeb']

我的文件夹结构如

app       (application root)
  scripts (contains common script files)
    kiosk (contains script files only for kiosk build)
    web   (contains script files only for web build)
  css     (contains common css files)
    kiosk (contains css files only for kiosk build)
    web   (contains css files only for web build)

理想情况下,在使用Web构建时,我不希望在文件更改时重新编译所有kiosk文件和Web文件。

有没有办法设置grunt来定义多个regarde任务并运行我想要进行的构建的特定任务?

如果我运行这些grunt任务,那么手表会工作,但会重建不属于我正在使用的特定构建的文件

grunt.registerTask 'watchKiosk', ['livereload-start', 'regarde']
grunt.registerTask 'watchWeb', ['livereload-start', 'regarde']

1 个答案:

答案 0 :(得分:0)

感谢asgoth他的链接,从链接的答案我能够找到一种方法来做到这一点。这可能不是最好的方式,但它有效。

我为我的regarde任务添加了两个不同的配置(一个用于kiosk构建,一个用于Web构建)到grunt文件:

regardeKiosk:
  coffeeScripts:
    files: ['app/scripts/kiosk/*.coffee', 'app/scripts/*.coffee'],
    tasks: ['coffee:compileKiosk', 'livereload']
  stylusScripts:
    files: ['app/css/kiosk/*.styl', 'app/css/*.styl'],
    tasks: ['stylus:compileKiosk', 'livereload']

regardeWeb:
  coffeeScriptsWeb:
    files: ['app/scripts/web/*.coffee', app/scripts/*.coffee],
    tasks: ['coffee:compileWeb', 'livereload']
  stylusScriptsWeb:
    files: ['app/css/web/*.styl', 'app/css/*.styl],
    tasks: ['stylus:compileWeb', 'livereload']

然后我创建了一个多任务,在启动关注任务之前选择正确的配置并更新regarde配置。

#startWatch config
startWatch:
  web: 'Web'
  kiosk: 'Kiosk'

grunt.registerMultiTask 'startWatch', 'refreshing the changed file(s)', () ->
  #read regarde config and regarde template config. @data comes from startWatch config
  regardeConfig = grunt.config('regarde')
  correctConfig = grunt.config('regarde' + @data)

  #replace regarde config with the correct config
  grunt.config('regarde', correctConfig)

  #run regarde task
  grunt.task.run('regarde')

然后我能够定义我的两个grunt任务,并根据构建选择要运行的任务[/ p>

grunt.registerTask 'watchKiosk', ['livereload-start', 'startWatch:kiosk']
grunt.registerTask 'watchWeb', ['livereload-start', 'startWatch:web']