当前位置: 首页 > 面试题库 >

如何创建和组织配置并注册Grunt任务

易焱
2023-03-14
问题内容

我有一个grunt用于处理我的文件JsSASS文件的项目。

目前,当我需要处理某些事情时,gruntfile.js即使我只想更改一个模块或SASS文件,也需要调用我内部的所有任务。

有没有一种方法可以创建自定义任务,仅运行sass部分,另一种方法仅创建模块进程,我可以在提示符下调用此任务?

这是我尝试过的,但没有成功:

    module.exports = function(gruntHome) {

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        /* @CONCAT */
        concat: {
            home : {
                src: 'src/app/component/home/*.js',
                dest: 'src/app/component/home/concat/concat_config.js'
            }
        },

        /* @ANNOTATE */
        ngAnnotate: {
            options: {
                add: true
            },
            home: {
                files: {
                    'src/app/component/home/concat/concat_config.js': 'src/app/component/home/concat/concat_config.js'
                }
            }
        },

        /* @UGLIFY */
        uglify: {
            home: {
                src:  'src/app/component/home/concat/concat_config.js',
                dest: 'app/component/home/home.min.js'
            }
        }
    });


    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-ng-annotate');

    grunt.registerTask('gruntTask', ['concat', 'ngAnnotate', 'uglify']);
};

如果不可能的话,还有其他方法可以实现这个目标吗?因为我的gruntfile.js很大,所以即使我不需要处理所有事情,有时也要花很多时间。

编辑:

这此链接是一个相关的问题我做了以下提供关于这个问题的步骤。它将解决您在尝试执行此处操作时可能遇到的一些问题。希望它可以帮助其他人。


问题答案:

您可以通过以下方式组织艰苦的任务:

  • config :默认任务
  • register :调用多个默认任务的别名任务

您必须遵守的一些规则

  • 文件名必须与任务名称相同(例如:ngAnnotate.js-> task:ngAnnotate)
  • 通过grunt插件将您的配置任务分组在一个文件中。 不要在配置任务中混用grunt-plugins,这里有注册任务。
  • 配置任务的名称和注册任务是共享的,因此您无法设置home配置任务和home注册任务,因为当您用grunt home调用它时,grunt无法知道您要引用的任务。

    ├── Gruntfile.js
    └── grunt
    ├── config
    │ ├── sass.js
    │ ├── concat.js
    │ └── uglify.js
    └── register
    ├── GroupOfTasks.js
    └── AnotherGroupOfTasks.js


Gruntfile.js将使用以下代码加载和配置grunt/configgrunt/register文件夹中的所有任务:

module.exports = function(grunt) {


    // Load the include-all library in order to require all of our grunt
    // configurations and task registrations dynamically.
    var includeAll;

    try {
        includeAll = require('include-all');
    }
    catch (e0) {
        console.error('Could not find `include-all` module.');
        console.error('Skipping grunt tasks...');
        console.error('To fix this, please run:');
        console.error('npm install include-all --save-dev');
        console.error();
    }

    /**
     * Loads Grunt configuration modules from the specified
     * relative path. These modules should export a function
     * that, when run, should either load/configure or register
     * a Grunt task.
     */
    function loadTasks(relPath) {
        return includeAll({
                dirname: require('path').resolve(__dirname, relPath),
                filter:  /(.+)\.js$/
            }) || {};
    }

    /**
     * Invokes the function from a Grunt configuration module with
     * a single argument - the `grunt` object.
     */
    function invokeConfigFn(tasks) {
        for (var taskName in tasks) {
            if (tasks.hasOwnProperty(taskName)) {
                tasks[taskName](grunt);
            }
        }
    }

    // Load task functions
    var taskConfigurations  = loadTasks('./grunt/config'),
        registerDefinitions = loadTasks('./grunt/register');

    // Run task functions to configure Grunt.
    invokeConfigFn(taskConfigurations);
    invokeConfigFn(registerDefinitions);

};

您的配置任务应如下所示(Eg:)sass.js

module.exports = function(grunt) {
    grunt.config.set('sass', {
        dev: {
            options: {
                sourceMap: false
            },
            files: {
                'main.css': 'main.scss'
            } 
        }
    });

    grunt.loadNpmTasks('grunt-sass');
};

您将能够运行config任务,grunt sass以运行所有sass任务或grunt sass:dev仅运行一个任务。

注册任务应如下所示(例如:SassAndConcat要运行的任务sassconcat任务):

module.exports = function(grunt) {
    grunt.registerTask('SassAndConcat', [
        'sass:dev',
        'concat:dev',
    ]);
};

现在您将能够运行grunt SassAndConcat

如果您了解这一点,则可以通过在正确的时间运行正确的任务来更有效地运行Grunt任务。

不要忘记安装include-allNPM模块,以动态要求我们执行所有必需的配置和任务注册。



 类似资料:
  • 我正在尝试创建一个简单的MDM服务器来管理iOS设备。但是我正在与“MDM注册配置文件”作斗争,我正在使用IPCU创建这个配置文件。但当我通过电子邮件(或weblink)打开这个配置文件时,什么也没有发生。 让我分享一下我正在做什么来创建“MDM注册配置文件”--在IPCU中创建新的配置文件。-填写“常规”部分的详细信息-填写“移动设备管理”的详细信息-填写完成上述步骤所需的“凭据”的详细信息-然

  • office 365似乎已从新闻提要中删除了“我的任务”页面(以前位于https://CompanyName-my.sharepoint.com/personal/UserName_CompanyName_onmicrosoft_com/AllTasks.aspx)因此,没有地方可以获得任务的综合视图。截至2016年7月,有三种类型的Office 365任务: > 对可通过URL处的规划器磁贴访问

  • 安装企业微信移动客户端后,可先在手机上创建企业,先行体验企业微信的便捷高效。 手机创建企业 1 / 创建流程 01/05选择微信登录。 02/05进行登录授权。 03/05输入管理员的手机号码及企业邮箱帐号。 04/05填写公司名称及管理员真实姓名。 05/05创建成功,开始体验企业微信。 2 / 移动端补充营业执照 若想体验功能更完整的企业微信,建议在手机上认领企业,补充营业执照。认领后可获得1

  • 我正在尝试为尚未添加到GitHub Enterprise安装中的任何团队或组织的用户生成组织邀请。 我已经按照医生的指示: https://developer.github.com/v3/orgs/members/#create-组织邀请 并根据需要添加Accept标头: 应用程序/vnd.github.dazzler-preview json 我是该组织的所有者,但我仍然只收到: {"消息":"

  • 问题内容: 这听起来像是一个非常笼统的问题,但这是正确的。 我有一个要求,以创建我的应用程序配置脚本,将生成的这种配置的结果(基本,,)。我的问题是,我应该从哪里开始构建?有没有我可以效仿的例子? 问题答案: 要创建标准的“配置”脚本,您需要GNU autoconf。您可能还需要GNU automake和libtool。 有大量的文档和指导。谷歌搜索“ autoconf automake howt

  •   在开始编写自己的数据库应用程序时,读者很快会遇到两个令人头痛的问题。一是在访问ODBC数据源前,必须在ODBC管理器中手工注册DSN(数据源名)。这样的应用程序要求用户作额外的工作,显得很不专业。另一个问题是AppWizard和ClassWizard并不支持表的创建,程序员似乎必须先用DBMS创建好表,然后才能使用。如果一个数据库应用程序不能自己创建表,那么它的功能将大打折扣。 事实上,通过一