Прерывание часов Grunt не работает с jekyll

Итак, я новичок в 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' ] )
};

Любая помощь приветствуется.


person Dan_ONeill    schedule 01.08.2014    source источник


Ответы (2)


Вы получили сообщение об ошибке, потому что пытались запустить 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 (думаю, в другом окне терминала)

Это должно работать правильно

person zdolny    schedule 05.11.2014

Я разрабатываю сайт с аналогичным рабочим процессом, но с Gulp вместо Grunt. Я заменил сервер jekyll по умолчанию на browserSync, который также автоматически перезагружает страницы при внесении изменений (полезно при разработке). Это пример файла сборки Gulp; можно сделать Grunt-эквивалент.

person Gianluca Mancini    schedule 02.08.2014
comment
Спасибо за это - хотя это не решило проблему, это дало мне идеальный обходной путь. Большое спасибо! - person Dan_ONeill; 04.08.2014