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');
};
4

1 回答 1

5

server选项使任务阻塞,因为它是持久的。您可以使用 taskswatch选项或类似grunt-concurrentjekyll的东西同时运行watch

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

grunt.loadNpmTasks('grunt-concurrent');
grunt.registerTask('default', ['concurrent:target']);
于 2013-07-25T10:23:54.653 回答