Задача не найдена с помощью grunt

Я пытаюсь использовать несколько задач в grunt, одна из них работает частично, а другая получает ошибки not found task,

Этот вопрос основан на этом, где я использую тот же 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']);
};

Проблема в:

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

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

Предупреждение: задание "дом" не найдено

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

1 ответ

Решение

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

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

Проблема с вашей текущей конфигурацией, для вызова задачи 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');
};

Здесь мы зарегистрировали задачу конфигурации sass, для ее запуска мы используем grunt sass, Он будет выполнять все подзадачи на этом веб-сайте и административные задачи. Теперь, если мы хотим запустить только задачу сайта, мы запустим: 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'
    ]);
};
Другие вопросы по тегам