是否可以在Gruntfile.js中获取已注册任务的列表,或者检查是否注册了单个任务名。
我要做的是:将grunt模块配置拆分为单个文件,以便能够轻松添加和删除它们,最后只加载模块及其配置(如果已安装)(基于package.json) devdependencies在'matchdep'的帮助下)。到目前为止这个工作正常。另外,我需要在JSON中定义aliasTask(以便能够以编程方式轻松添加新任务)。
问题是,列表可能包含未注册的任务,并且如果该任务未注册,则grunt会抛出错误,我必须在调用registerTask之前将它们从列表中过滤掉。因此,如果注册了适当的任务,我正在寻找一种测试当前taskName的方法。
这是一个显示想法https://gist.github.com/MarcelloDiSimone/5631466
的要点在那个要点中,我正在检查配置文件的密钥,但这不可靠,因为某些任务可能没有配置(如livereload),因此它们会被错误地过滤掉。
答案 0 :(得分:0)
你的第一个问题:是的,有可能。运行grunt --help
会为您提供所有可用grunt *
任务的列表;无论是npm任务还是你自己的别名。
关于Gruntfile的模块化,I had a look into this a few days ago。使用像matchdep这样的东西也是完全可能的。
module.exports = function(grunt) {
"use strict";
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
var conf = {
pkg: grunt.file.readJSON('package.json')
};
grunt.file.recurse('./.grunt/config', function(abspath, rootdir, subdir, filename) {
conf[filename.replace(/\.js$/, '')] = require('./' + abspath);
});
grunt.initConfig(conf);
grunt.loadTasks('./.grunt/tasks');
};
然后,所有配置文件都以.grunt/config
结尾,所有任务最终都在.grunt/tasks
。示例任务:
// .grunt/tasks/default.js
module.exports = function(grunt) {
grunt.registerTask('default', 'Build a complete, concatenated and minified distribution.', [
'sass',
'cssc',
'cssmin',
'jshint',
'uglify'
]);
}
cssmin的示例配置:
// .grunt/config/cssmin.js
exports.minify = {
src: 'assets/css/master.css',
dest: 'assets/css/master.css'
};
认为这是处理此问题的一种很好的方法,因此我将其发布在此处以供将来参考。 : - )