Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建和组织配置和注册grunt任务_Javascript_Node.js_Gruntjs - Fatal编程技术网

Javascript 如何创建和组织配置和注册grunt任务

Javascript 如何创建和组织配置和注册grunt任务,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,我有一个项目,我正在使用grunt处理我的Js和SASS文件 此时,当我需要处理某些内容时,我需要调用grunfile.js中的所有任务,即使我只想更改一个模块,或者只更改SASS文件 有没有一种方法可以创建一个自定义任务,只运行sass部分,还有一种方法只创建一个模块进程,我可以在提示符下调用这个任务 这就是我尝试过的,但没有成功: module.exports = function(gruntHome) { grunt.initConfig({ pkg: g

我有一个项目,我正在使用
grunt
处理我的
Js
SASS
文件

此时,当我需要处理某些内容时,我需要调用
grunfile.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很大,有时需要花很多时间来处理,即使我不需要处理所有的事情


编辑:
这是一个相关的问题,我按照这个问题提供的步骤提出。它将解决你在尝试做我在这里所做的事情时可能遇到的一些问题。希望它能帮助其他人。

以下是如何组织您的繁重任务:

  • 配置:默认任务
  • 注册:调用多个默认任务的别名任务
一些您必须遵守的规则

  • 文件名必须与任务名相同(例如:ngAnnotate.js->task:ngAnnotate)
  • 通过grunt插件将配置任务分组到一个文件中不要在配置任务中混用grunt插件,注册此作业的任务。
  • 配置任务和注册任务的名称是共享的,因此您不能设置
    home
    配置任务和
    home
    注册任务,因为当您使用grunt home调用它时,grunt无法知道您引用的任务
├── Grunfile.js
└── 咕哝
├── 配置
│   ├── sass.js
│   ├── concat.js
│   └── uglify.js
└── 登记
├── GroupOfTasks.js
└── 另一个groupoftasks.js
您的
Gruntfile.js
将使用以下代码加载和配置
grunt/config
grunt/register
文件夹中的所有任务:

module.exports=函数(grunt){
//加载include all库以要求所有的grunt
//动态配置和任务注册。
var includeal;
试一试{
includeAll=require('include-all');
}
渔获物(e0){
console.error('找不到'include all'模块');
错误('跳过咕噜任务…');
console.error('要修复此问题,请运行:');
错误('npm安装包含所有--save dev');
console.error();
}
/**
*从指定的服务器加载Grunt配置模块
*这些模块应该导出一个函数
*运行时,应该加载/配置或注册
*繁重的任务。
*/
函数加载任务(relPath){
返回包括所有({
dirname:require('path')。解析(_dirname,relPath),
过滤器:/(.+)\.js$/
}) || {};
}
/**
*使用从Grunt配置模块调用函数
*一个参数--“grunt”对象。
*/
函数invokeConfigFn(任务){
for(任务中的var taskName){
if(tasks.hasOwnProperty(taskName)){
任务[任务名称](grunt);
}
}
}
//加载任务函数
var taskConfigurations=loadTasks('./grunt/config'),
registerDefinitions=loadTasks('./grunt/register');
//运行任务函数来配置Grunt。
invokeConfigFn(任务配置);
invokeConfigFn(registerDefinitions);
};
您的配置任务应该是这样的(例如:
sass.js
):

module.exports=函数(grunt){
grunt.config.set('sass'{
开发人员:{
选项:{
sourceMap:false
},
档案:{
'main.css':'main.scss'
} 
}
});
grunt.loadNpmTasks(“grunt-sass”);
};
您可以使用
grunt-sass
运行配置任务以运行所有sass任务,或使用
grunt-sass:dev
仅运行一个任务

注册任务应该是这样的(例如:
SassAndConcat
task运行
sass
concat
task):

module.exports=函数(grunt){
grunt.registerTask('SassAndConcat'[
“sass:dev”,
“concat:dev”,
]);
};
现在您将能够运行
grunt SassAndConcat

如果您了解这一点,您将能够在正确的时间运行正确的任务,从而更高效地运行grunt任务


不要忘记安装
包含所有
NPM模块,以便动态地要求所有grunt配置和任务注册。

很好!很好,我想我明白了。还有一件事。如何从提示中调用它?现在我只需输入“咕噜”,它就能运行所有程序。我是否应该创建多个名为“sassGrunt”的模块,并在提示“sassGrunt”时调用它?我已经用如何运行配置和注册任务的信息更新了anwser。好的,谢谢您的帮助。这将节省我很多时间!如果你想看到一个包含许多任务的完整示例,请查看此存储库:@LouisBarranqueiro极好的答案-看起来你使用了SailsJS Gruntfile.js代码和组织,因为它们基本相同?无论如何,我想知道,我想使用jit grunt来显著减少文件监视处理器的这种方法的加载时间。但是,基于time grunt和
grunt-v myprocess:dev的时间采样,所有任务都已加载!关于如何使用jit grunt来改进这种方法以只加载所需的任务,有什么想法吗?