grunt:在registerTask方法中包含其他任务时,watch命令从未运行

3
我在使用Gruntfile时遇到了一些意外的问题。我注册了一个任务,看起来像这样:grunt.registerTask('dev', ['jekyll:server', 'watch:jekyll']) 希望它能顺序启动jekyll服务器,然后使用grunt-contrib-watch插件监视我的项目特定文件的更改。一旦检测到这些更改,它将自动重新运行jekyll:server
我遇到的问题是当我运行grunt dev时,它会启动Jekyll服务器,但不会运行watch命令。但是,如果我从grunt dev中删除服务器任务,则会按预期运行watch命令。
以下是我的Gruntfile内容。有谁能帮我理解发生了什么?
module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({

    jekyll: {
      server : {
        server: true,
        server_port: 4000,
        exclude: ['node_modules']
      },
      prod: {
        dest: './_site-release'
      }
    },

    watch: {
      jekyll: {
        files: ['_posts/**/*.md', '_layout/*.html', '_includes/*.html', 'index.html'],
        tasks: ['jekyll:server']
      }
    }
  });

  grunt.loadNpmTasks('grunt-jekyll');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('default', 'jekyll:server');
  grunt.registerTask('dev', ['jekyll:server', 'watch:jekyll']);
  grunt.registerTask('release', 'jekyll:prod');
};
1个回答

5

server选项会使任务阻塞,因为它是持久化的。您可以使用任务的watch选项或类似grunt-concurrent的工具并行运行jekyllwatch

grunt.initConfig({
    concurrent: {
        target: {
            tasks: ['jekyll:server', 'watch'],
            options: {
                logConcurrentOutput: true
            }
        }
    }
});

grunt.loadNpmTasks('grunt-concurrent');
grunt.registerTask('default', ['concurrent:target']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接