2013-05-13 4 views
4

У меня есть следующий файл Gruntfile.coffee. Я отслеживаю задачу просмотра, как показано ниже, чтобы увидеть изменения файла, а затем скомпилировать измененный файл в кофейный скрипт.Мониторинг подзадачи для grunt-contrib-watch

# Watch task 
watch: 
coffee: 
    files: ['client/**/*.coffee','server/**/*/.coffee'] 
    options: 
    nospawn: true 
    livereload: true 

# Watch changed files 
grunt.event.on 'watch', (action, filepath) -> 
cwd = 'client/' 
filepath = filepath.replace(cwd,'') 
grunt.config.set('coffee', 
    changed: 
    expand: true 
    cwd: cwd 
    src: filepath 
    dest: 'client-dist/' 
    ext: '.js' 
) 
grunt.task.run('coffee:changed') 

Однако, я хотел бы добавить еще одну задачу для копирования файлов, которые не являются кофейными файлами. Как я буду следить за этими изменениями?

Я думал, что делать

# Watch copy task 
grunt.event.on 'watch:copy', (action,filepath) -> ... 
# Watch coffee task 
grunt.event.on 'watch:coffee', (action,filepath) -> ... 

, но это не похоже на работу. Идеи?

ответ

2

Мое решение - получает работу, но не очень. Я приветствую лучшие ответы

В принципе, я сопрягать путь входящего файла
, если его .coffee запустить кофе компилировать задачу
, если ее. * запустить задачу копирования

# Watch changed files 
grunt.event.on 'watch', (action, filepath) -> 

# Determine server or client folder 
path = if filepath.indexOf('client') isnt -1 then 'client' else 'server' 
cwd = "#{path}/" 
filepath = filepath.replace(cwd,'')   

# Minimatch for coffee files 
if minimatch filepath, '**/*.coffee' 
    # Compile changed file 
    grunt.config.set('coffee', 
    changed: 
    expand: true 
    cwd: cwd 
    src: filepath 
    dest: "#{path}-dist/" 
    ext: '.js' 
) 
    grunt.task.run('coffee:changed') 

# Minimatch for all others 
if minimatch filepath, '**/*.!(coffee)' 
    # Copy changed file 
    grunt.config.set('copy', 
    changed: 
    files: [ 
    expand: true 
    cwd: cwd 
    src: filepath 
    dest: "#{path}-dist/"      
    ] 
) 
    grunt.task.run("copy:changed") 
+0

это помогло - https://gist.github.com/luissquall/5408257 – imrane

1

Взгляните на примечании в нижней части, например часы события: https://github.com/gruntjs/grunt-contrib-watch#using-the-watch-event

watch события не предназначен на замену API Grunt. Используйте tasks вместо:

watch: 
    options: 
    nospawn: true 
    livereload: true 
    coffee: 
    files: ['client/**/*.coffee','server/**/*/.coffee'] 
    tasks: ['coffee'] 
    copy: 
    files: ['copyfiles/*'] 
    tasks: ['copy'] 
+1

Я только хочу измененные файлы ... задача часы работает компилировать все файлы в этих папках – imrane

+0

Затем продолжайте использовать 'grunt.config.set()' в ' часы' мероприятие. Просто не используйте 'grunt.task.run()' в событии 'watch'. Для этого нужны «задачи». –

+0

Я хотел бы запустить задачу после того, как я отфильтровываю файлы, которые меняются ... как бы я это сделал? – imrane

Смежные вопросы