2015-11-19 4 views
1

Я пытаюсь использовать несколько задач в grunt, один из них работает неполноценно, а другой получает erros not found task.Задача не найдена с использованием grunt

Этот вопрос основан on this one, где я использую те же gruntfile.js и ту же структуру, которая заключается в следующем:

├── Gruntfile.js 
└── grunt 
    ├── config 
    │ ├── conf_sass.js 
    │ └── conf_home.js 
    └── register 
     ├── reg_sass.js 
     └── reg_home.js 

С помощью этого соответствующих файлов:

conf_sass.js

module.exports = function(grunt) { 
    grunt.config.set('sass', { 

     sass: { 
      options: { 
       style:'expanded', 
       compass: true 
      }, 
      files: { 
       'src/css/app.css' : 'src/sass/app.scss' 
      } 
     }, 
     cssmin: { 
      options: { 
       shorthandCompacting: false, 
       roundingPrecision: -1 
      }, 
      target: { 
       files: { 
        'dist/css/app.min.css': 'src/css/app.css' 
       } 
      } 
     } 

    }); 

    grunt.loadNpmTasks('grunt-contrib-sass'); 
    grunt.loadNpmTasks('grunt-contrib-cssmin'); 
}; 

reg_sass.js

module.exports = function(grunt) { 
    grunt.registerTask('compSass', ['sass']); 
}; 

conf_home.js

module.exports = function(grunt) { 
    grunt.config.set('home', { 

     concat: { 
      dist : { 
       src: 'src/.../home/*.js', 
       dest: 'src/.../concat_home.js' 
      } 
     }, 
     ngAnnotate: { 
      options: { 
       add: true 
      }, 
      dist: { 
       files: { 
        'src/.../concat_home.js': 'src/.../concat_home.js' 
       } 
      } 
     }, 
     uglify: { 
      dist: { 
       src: 'src/.../concat_home.js', 
       dest: 'app/.../home.min.js' 
      } 
     } 

    }); 

    grunt.loadNpmTasks('grunt-contrib-concat'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-ng-annotate'); 
}; 

reg_home.js

module.exports = function(grunt) { 
    grunt.registerTask('compHome', ['home']); 
}; 

Проблема заключается в том:

Процесс дерзость, работает все без erros, но не выполняет CSS Минимизировать часть , даже без ошибок.

Домашний процесс, возвращает ошибку

Warning: task 'home' not found

Что случилось с ним? У меня установлены все модули, потому что они все работали, прежде чем перейти к новой структуре.

ответ

2

Есть несколько проблем:
- имя файла должно совпадать с именем вашей задачи (Например: ngAnnotate.js -> задача: ngAnnotate)
- ваша задача не сгруппированы по хрюкать плагинов
- имя задачи конфигурации и задачи регистрации разделены, тогда вы не можете установить задачу конфигурации home и задачу реестра home, потому что, когда вы вызываете ее с помощью grunt home, хрюканье не может знать задачу, на которую вы ссылаетесь.

Вы должны соблюдать эти правила для задачи конфигурации: задачи настройки группы, которые используют одни и те же плагины в одном файле, не смешивают плагины-гримеры в задачах конфигурации, для этого задания регистрируются задачи регистрации.

Проблема с текущей конфигурацией, чтобы позвонить cssmin задачу, вы должны запустить grunt sass:cssmin и это не имеет смысла. Вот почему, группируя задачи конфигурации с ворчанием плагинов, вы называете cssmin задачу с grunt cssmin или подзадачи в нем с grunt cssmin:<subtask_name>

Вот пример:

module.exports = function(grunt) { 
    grunt.config.set('sass', { 
     website: { 
      options: { 
       style:'expanded', 
       compass: true 
      }, 
      files: { 
       'src/css/app.css' : 'src/sass/app.scss' 
      } 
     }, 
     admin: { 
      options: { 
       style:'expanded', 
       compass: true 
      }, 
      files: { 
       'src/css/app.css' : 'src/sass/app.scss' 
      } 
     }, 
    }); 
    grunt.loadNpmTasks('grunt-contrib-sass'); 
}; 

Здесь мы зарегистрировали дерзость задание конфигурации, чтобы запустить его, мы используем grunt sass.Он будет запускать всю подзадачу в нем сайт и admin вспомогательные задачи. Теперь, если мы хотим работать только задачи сайта, мы проводим: grunt sass:website

Тогда в вашем случае, вот что ваша структура должна выглядеть следующим образом:

├── Gruntfile.js 
└── grunt 
    ├── config 
    │ ├── sass.js 
    │ ├── concat.js 
    │ ├── cssmin.js 
    │ ├── uglify.js 
    │ └── ngAnnotate.js 
    └── register 
     ├── sassAndCssmin.js 
     └── home.js 

ваш sass.js файл:

module.exports = function(grunt) { 
    grunt.config.set('sass', { 
     sass: { 
      options: { 
       style:'expanded', 
       compass: true 
      }, 
      files: { 
       'src/css/app.css' : 'src/sass/app.scss' 
      } 
     }, 
    }); 
    grunt.loadNpmTasks('grunt-contrib-sass'); 
}; 

ваш cssmin.js файл:

module.exports = function(grunt) { 
    grunt.config.set('cssmin', { 
     cssmin: { 
      options: { 
       shorthandCompacting: false, 
       roundingPrecision: -1 
      }, 
      target: { 
       files: { 
        'dist/css/app.min.css': 'src/css/app.css' 
       } 
      } 
     } 

    }); 

    grunt.loadNpmTasks('grunt-contrib-cssmin'); 
}; 

ваш concat.js файл:

module.exports = function(grunt) { 
    grunt.config.set('concat', { 
     home: { 
      dist : { 
       src: 'src/.../home/*.js', 
       dest: 'src/.../concat_home.js' 
      } 
     }, 
    }); 
    grunt.loadNpmTasks('grunt-contrib-concat'); 
}; 

ваш ngAnnotate.js файл:

module.exports = function(grunt) { 
    grunt.config.set('ngAnnotate', { 
     home: { 
      options: { 
       add: true 
      }, 
      dist: { 
       files: { 
        'src/.../concat_home.js': 'src/.../concat_home.js' 
       } 
      } 
     }, 

    }); 
    grunt.loadNpmTasks('grunt-ng-annotate'); 
}; 

же процесс для других задач настройки.

А вот пример с задачами регистра:

ваш sassAndCssmin.js файл:

module.exports = function(grunt) { 
    grunt.registerTask('sassAndCssmin', [ 
     'sass', 
     'cssmin' 
    ]); 
}; 

ваш home.js файл:

module.exports = function(grunt) { 
    grunt.registerTask('home', [ 
     'concat', 
     'ngAnnotate', 
     'uglify' 
    ]); 
}; 
+1

Другим удивительным объяснение! Большое спасибо Луи, мне стало ясно, как все это работает, а также, чтобы улучшить рабочий процесс. Еще раз спасибо! – celsomtrindade

+0

Возможно ли иметь такой регистр: '' concat: home ',' ngAnnotate: home ',' uglify: home''? Поскольку я хочу создать несколько файлов для обработки только тех конкретных частей, так как каждый из них будет содержать все мои модули, и я не буду выполнять их все одновременно. В настоящее время я не могу этого сделать, есть эта ошибка: задача не найдена – celsomtrindade

+1

Конечно, приятель! с подзадачами, вы можете выполнять задачу более эффективно –

Смежные вопросы