2013-04-11 27 views
0

我正在使用gruntjs来构建我的js应用程序。我的grunt文件设置为运行两个独立的版本,其中80%的代码对于两者都是相同的,并且取决于构建,我们包括附加文件并排除一些文件。grunt-regard可以配置为运行watch任务的一个子集而不是所有任务吗?

我有grunt安装程序来正确运行这两个不同的版本,除非我不能告诉grunt-多次运行。

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) 

理想。

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

如果我运行这些繁重的任务的腕表作品,但将重建不我与

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

我认为你必须使用咕噜事件,有关的任务。我的答案与您的用例不完全相同,但它提供了一个总体思路:http://stackoverflow.com/a/15496488/1916258 – asgoth 2013-04-12 07:18:27

回答

0

谢谢合作asgoth为他的链接的具体构建的一部分文件,从链接答案我能想出办法做到这一点。这可能不是最好的方法,但它的工作原理。

我增加了我的regarde任务两种不同的配置(一个用于亭构建和一个用于网络建设),以繁重的文件:

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.registerTask 'watchKiosk', ['livereload-start', 'startWatch:kiosk'] 
grunt.registerTask 'watchWeb', ['livereload-start', 'startWatch:web'] 
相关问题