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
注册任务,因为当您使用grunt home调用它时,grunt无法知道您引用的任务李>home
├── 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来改进这种方法以只加载所需的任务,有什么想法吗?