Грунтовые задачи застряли в бесконечном цикле

Работаем над созданием базы Gruntfile.js для некоторых будущих проектов. Начиная на новом компьютере, так что все было свежей сборки. Установил Node и NPM с помощью Homebrew, а затем установил Grunt глобально, а также в мой локальный каталог.

Вот мой package.json:

{
  "name": "timespent-prototype",
  "version": "0.1.0",
  "devDependencies": {
    "assemble": "0.4.37",
    "bower": "^1.4.1",
    "grunt": "^0.4.5",
    "grunt-contrib-concat": "^0.5.1",
    "grunt-contrib-sass": "^0.9.2",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-newer": "^1.1.0",
    "grunt-wiredep": "^2.0.0"
  }
}

А вот мой Gruntfile.js:

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    concat: {
      vendor: {
       src: ['vendor/**/*.min.js'],
       dest: 'build/javascripts/library.js',
      }
    },

    // Takes your scss files and compiles them to css
    sass: {
      dist: {
        options: {
          style: 'expanded'
        },
        files: {
          'build/stylesheets/application.css': 'app/stylesheets/application/index.scss'
        }
      }
    },

    // Assembles your templates into HTML files
    assemble: {
      options: {
        layoutdir: 'app/views/layouts/',
        partials: ['app/views/partials/*.hbs'],
        flatten: true,
        expand: true
      },
      pages: {
        src: ['app/views/**/*.hbs','!app/views/layouts/*.hbs','!app/views/partials/*.hbs'],
        dest: 'build/'
      }
    },

    wiredep: {
      task: {
        src: ['app/views/layouts/*.hbs']
      }
    },

    // Watches for file changes, runs the default task
    watch: {
      files: ['app/**/*'],
      tasks: ['default'],
      options: {
        // Start another live reload server on port 1337
        livereload: 1337,
      }
    }

  });

  // Load the plugins
  grunt.loadNpmTasks('assemble');
  grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-newer');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-wiredep');

  // Register the tasks
  grunt.registerTask('default', ['sass','assemble']);
  grunt.registerTask('watch', ['watch']);
  grunt.registerTask('concat', ['concat']);
  grunt.registerTask('wiredep', ['wiredep']);
};

Проблема, которую я вижу, заключается в том, что с несколькими задачами, здесь конкретно с wiredep а также concat, задача застревает в цикле и никогда не заканчивается. Бег grunt concat с подробными выводами вроде этого:

Registering "grunt-contrib-concat" local Npm module tasks.
Reading /Users/jacksonlynch/projects/timespent-prototype/node_modules/grunt-contrib-concat/package.json...OK
Parsing /Users/jacksonlynch/projects/timespent-prototype/node_modules/grunt-contrib-concat/package.json...OK
Loading "concat.js" tasks...OK
+ concat

Running tasks: concat

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task

куда Running "concat" task будет продолжать печатать, пока я не остановлю его. Поскольку я вижу это с несколькими плагинами и задачами, это может быть проблемой с моей установкой NPM или Grunt, но мне очень трудно отлаживать это. Если кто-то сталкивался с этим раньше, пожалуйста, дайте мне знать, что помогло!

Спасибо!


Изменить: в ответ на комментарий Алиреза Ахмади, вот моя структура файла:

.
|
|_ app/
  |_ assets/
  |_ javascript/
  |_ stylesheets/
  |_ views/
|
|_ build/
  |_stylesheets/
  |_javascripts/
|
|_ vendor/
|_ bower.json
|_ Gruntfile.js
|_ package.json

1 ответ

Решение

В последних 2 строчках вашего Gruntfile.js вы объявили concat а также wiredep Задачи и когда grunt пытается запустить ваш код, он застрял в бесконечном цикле, потому что concat ссылается на неопределенную задачу concat, поэтому вы должны удалить эти строки:

grunt.registerTask('concat', ['concat']);
grunt.registerTask('wiredep', ['wiredep']);

В общем, когда вы определяете задачу с именем foobar с grunt.initConfig, Он определен и не нуждается в регистрации, используя registerTask и это может быть доступно grunt foobar команда.

Другие вопросы по тегам