Grunt手表中断不与jekyll合作

时间:2014-08-01 11:48:46

标签: gruntjs jekyll grunt-contrib-watch

所以我是Grunt的新手,并一直在尝试为它和Jekyll实施工作流程。所以我有一个运行的监视任务,但它似乎无法在尝试再次启动Jekyll之前中断当前的服务任务,因为我收到有关端口绑定的错误,特别是 jekyll 2.0.3 |错误:地址已在使用中 - bind(2)

可能是我做了一些愚蠢或不理解的事情,但有人有任何想法吗?这是我的gruntfile:

module.exports = function( grunt ) {
// load time-grunt and all grunt plugins found in the package.json
require( 'time-grunt' )( grunt );
require( 'load-grunt-tasks' )( grunt );
grunt.initConfig({
    csslint : {
        test : {
            options : {
                import : 2
            },
            src : [ 'css/main.css' ]
        }
    },

    cssmin : {
        dist : {
            src : 'css/main.css',
            dest : 'css/main.min.css'
        }
    },

    shell : {
        jekyllBuild : {
            command : 'glynn'
        },
        jekyllServe : {
            command : 'jekyll serve'
        }
    },

    watch : {
        files : [ '_layouts/*.html',
                  '_posts/*.md',
                  'css/main.css',
                  '_config.yml',
                  'index.html',
                  '404.html' ],
        tasks : [ 'cssmin',
                  'shell:jekyllServe' ],
        options : {
            spawn : true,
            interrupt : true,
            atBegin : true,
            debounceDelay: 250
        }
    }
});

grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-csslint');
grunt.loadNpmTasks('grunt-shell');

// register custom grunt tasks
grunt.registerTask( 'lintcheck', [ 'cssmin','csslint', 'shell:jekyllServe' ] )
grunt.registerTask( 'qbuild', [ 'cssmin', 'shell:jekyllServe' ] )
grunt.registerTask( 'deploy', [ 'cssmin', 'shell:jekyllBuild' ] )
};

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我正在开发一个具有类似工作流程但使用Gulp而不是Grunt的网站。我使用browserSync交换了默认的jekyll服务器,它还在更改时自动重新加载页面(在开发中很有用)。 This是一个示例Gulp构建文件;可以制作一个Grunt等价物。

答案 1 :(得分:0)

您遇到错误,因为您尝试多次运行jekyll serve(服务器已在运行时)。正如您可以在文档中阅读的那样,jekyll serve在localhost:4000(http://jekyllrb.com/docs/usage/)运行开发服务器,因此您可以同时在特定端口上仅启动一个开发服务器。之后,只需要在某些文件发生变化时将jekyll重建为./_site。您可以使用jekyll build

执行此操作

我修改了你的Gruntfile:

module.exports = function( grunt ) {
// load time-grunt and all grunt plugins found in the package.json
require( 'time-grunt' )( grunt );
require( 'load-grunt-tasks' )( grunt );
grunt.initConfig({
    csslint : {
        test : {
            options : {
                import : 2
            },
            src : [ 'css/main.css' ]
        }
    },

    cssmin : {
        dist : {
            src : 'css/main.css',
            dest : 'css/main.min.css'
        }
    },

    shell : {
        jekyllBuildLocal : {
            command : 'jekyll build'
        },
        jekyllBuild : {
            command : 'glynn'
        },
        jekyllServe : {
            command : 'jekyll serve'
        }
    },

    watch : {
        files : [ '_layouts/*.html',
                  '_posts/*.md',
                  'css/main.css',
                  '_config.yml',
                  'index.html',
                  '404.html' ],
        tasks : [ 'cssmin',
                  'shell:jekyllBuildLocal' ],
        options : {
            spawn : true,
            interrupt : true,
            atBegin : true,
            debounceDelay: 250
        }
    }
});

grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-csslint');
grunt.loadNpmTasks('grunt-shell');

// register custom grunt tasks
grunt.registerTask( 'lintcheck', [ 'cssmin','csslint', 'shell:jekyllBuildLocal' ] )
grunt.registerTask( 'qbuild', [ 'cssmin', 'shell:jekyllBuildLocal' ] )
grunt.registerTask( 'deploy', [ 'cssmin', 'shell:jekyllBuild' ] )
};

我建议你开发的是:

  1. grunt shell:jekyllServe
  2. grunt watch(我想在其他终端窗口中)
  3. 这应该可以正常使用