我可以得到所有注册模块的列表在我的Gruntfile.js

Can I get a list of all registered modules in my Gruntfile.js

本文关键字:列表 我的 Gruntfile js 模块 注册 我可以      更新时间:2023-09-26

是否可以在我的Gruntfile.js中获得已经注册的任务列表,或者检查是否注册了单个任务名。

我要做的是:将grunt模块配置拆分为单个文件,以便能够轻松地添加和删除它们,最后只加载模块及其配置,如果它们被安装(基于包)。在'matchdep'的帮助下)。到目前为止,这工作得很好。此外,我需要在JSON中定义aliasTask(能够轻松地以编程方式添加新任务)。

问题是,列表可能包含未注册的任务,并且由于grunt如果该任务未注册则抛出错误,因此我必须在调用registerTask之前将它们从列表中过滤出来。因此,我正在寻找一种方法来测试当前taskName,如果一个适当的任务注册。

下面是展示这个想法的要点https://gist.github.com/MarcelloDiSimone/5631466

在这个要点中,我目前正在检查配置文件的关键字,但这是不可靠的,因为有些任务可能没有配置(如肝脏负载),因此它们会被错误地过滤掉。

你的第一个问题:是的,这是可能的。运行grunt --help将为您提供所有可用grunt *任务的列表;不管是NPM任务还是你自己的别名。

至于模块化你的Gruntfile,几天前我研究了一下。使用像matchdeep这样的东西也是完全可能的。

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'
};

认为这是处理这个问题的好方法,所以我把它贴在这里供将来参考。: -)