Задача не найдена с помощью 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'
]);
};