node.js - Grunt.js : Fire livereload as soon a files are modified, 任务完成前

标签 node.js gruntjs livereload grunt-contrib-watch

我正在使用 Grunt 来编译我的带有指南针的 CSS 并触发浏览器 livereload。这些是我的 watch 任务:

watch: {
    styles: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.scss', '!**/*.{dev,min}.scss'],
        tasks: [
            'concat:styles',
            'compass:styles',
            'imagemin:styles',
            'cssmin:styles',
            'clean:styles',
        ],
    },
    scripts: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.js', '!**/*.{dev,min}.js'],
        tasks: [
            'concat:scripts',
            'uglify:scripts',
        ],
    },
    livereload: {
        options: {
            livereload: true,
            spawn: false,
        },
        files: [assetsDir + '/**/*.{dev,min}.{css,js}'],
    },
},  

目前,在样式任务完全完成之前,livereload 任务不会触发,但是 imagemin 可能会增加一些明显的延迟,我真正关心的是 CSS,它在 compass 完成后立即准备就绪。

如何让 livereload 在罗盘完成后立即触发,但允许其他任务继续进行?我尝试了下面的配置,它在 CSS 更改时触发 imagemin,但它似乎不起作用。由于某种原因,使用此 imagemin 根本不会触发。不能让多个任务看同一个文件吗?

watch: {
    styles: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.scss', '!**/*.{dev,min}.scss'],
        tasks: [
            'concat:styles',
            'compass:styles',
            'cssmin:styles',
            'clean:styles',
        ],
    },
    scripts: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.js', '!**/*.{dev,min}.js'],
        tasks: [
            'concat:scripts',
            'uglify:scripts',
        ],
    },
    images: {
        options: {
            spawn: false,
        },
        files: [assetsDir + '/**/*.{dev,min}.css'],
        tasks: [
            'imagemin:styles',
        ],
    },
    livereload: {
        options: {
            livereload: true,
            spawn: false,
        },
        files: [assetsDir + '/**/*.{dev,min}.{css,js}'],
    },
},

谢谢。

最佳答案

我已经通过使用 grunt-concurrent 成功实现了这个功能并行运行三个 watch 任务:

concurrent: {
    options: {
        logConcurrentOutput: true,
    },
    watch: [
        'watch:scripts',
        'watch:styles',
        'watch:livereload',
    ],
},

关于node.js - Grunt.js : Fire livereload as soon a files are modified, 任务完成前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186455/

相关文章:

gruntjs - 无法使用 grunt imagemin 优化文件夹内的图像

gruntjs - 如何在 Yeoman 中通过 Livereload 更改自动打开页面?

ios - react native 0.47 : Reload on iOS device

vagrant - Gulp livereload 什么都不做

javascript - Angular-pdf-viewer 在 grunt 构建后无法工作

node.js - grunt-contrib-copy 因不允许 EPERM 操作而死亡 "C:\Documents and Settings"

node.js - 创建项目 cordova-lib 时出错 cordova-app-hello-world missing

javascript - Puppeteer 获取有关页面加载的信息 - 加载的文件列表及其大小

node.js - dynamodb 最大项目长度 (64k) 和 no-sql 缺少表连接的实用解决方案

node.js - Ubuntu - Node 环境中出现 Spawn EACCES 错误