注册代码位于外部 JavaScript 文件中的 Grunt 任务



我写了一个函数,我想把它用作Grunt任务。我可以通过将其添加到 Gruntfile 来做到这一点:

grunt.registerTask('foo', function () {
    // code here
});

但是,将函数代码保存在单独的文件中更有意义。我计划定义一堆这些自定义任务,我不想使 Gruntfile 膨胀。

我不确定注册此类任务的首选方法是什么。我发现这有效:

grunt.registerTask('foo', function () {
    require('./path/to/foo.js')(grunt);
});
所以,我

有一个内联函数,就像在第一个例子中一样,但这一次,我加载了一个外部文件并立即调用它。在那个外部文件中,我当然必须写:

module.exports = function (grunt) {
    // code here
}

这行得通,但感觉很黑客。有没有更合适的方法

简短的回答:这个的替代方案

grunt.registerTask('foo', function () {
    require('./path/to/foo.js')(grunt);
});

是 http://gruntjs.com/api/grunt#grunt.loadtasks

长答案:

通常,当您在外部文件中有任务时,会作为其他nodejs模块提供服务。因此,如果这是您将在多个项目中使用的东西,则可能需要在注册表中注册它。稍后在您的 Gruntfile 中.js您将拥有:

grunt.loadNpmTasks('yout-module-here');

咕噜咕噜的文件说:

Load tasks from the specified Grunt plugin. This plugin must be installed locally via npm, and must be relative to the Gruntfile

但是,如果您不想将任何内容上传到注册表,则应使用 loadTasks

grunt.loadTasks('path/to/your/task/directory');

因此,加载任务后,您可以在配置中使用它。

这是放置在外部文件中的简单咕噜声任务:

'use strict';
module.exports = function(grunt) {
    grunt.registerMultiTask('nameoftask', 'description', function() {
        var self = this;
        // this.data here contains your configuration
    });
};

后来在咕噜咕噜.js

grunt.initConfig({
    nameoftask: {
        task: {
            // parameters here
        }
    }
});

我也有类似的问题。

我想通过功能(大型UX/UI块)而不是技术特性来模块化我的繁琐配置和自定义任务。而且我想将配置文件保留在任务文件旁边...(在与不同团队的大型遗留代码库上工作时更好 - 5 人具有不同的 JS 知识)

所以我像克拉西米尔一样外化了我的任务。

在咕噜咕噜的文件中,我写道:

//power of globbing for loading tasks
var tasksLocations = ['./grunt-config/default_tasks.js', './grunt-config/**/tasks.js'];
var taskFiles = grunt.file.expand({
    filter: "isFile"
  }, tasksLocations);
taskFiles.forEach(function(path) {
  grunt.log.writeln("=> loading & registering : " + path);
  require(path)(grunt);
});

您将在此处找到整个样板gruntfile(外部配置和任务加载): https://gist.github.com/0gust1/7683132

最新更新