js模块化开发—Gruntfile.js详解

互联网 19-11-28

一、grunt模块简介

【相关课程推荐:JavaScript视频教程】

"scripts": {     "build": "npm install && grunt" }

因为运行npm run build会先安装devDependencies中定义的一些模块,则运行npm run build这个命令相当于做如下操作:

● npm install grunt-cli -g

● npm install

● grunt

二、gruntfile.js的结构:

● "wrapper" 函数

● 项目和任务配置

● 加载 grunt 插件和任务

● 自定义任务

三、"wrapper" 函数

每一份 Gruntfile.js(和grunt插件)都遵循同样的格式,你所书写的Grunt代码必须放在此函数内:

module.exports = function(grunt){          //do grunt-related things in here }

四、项目和任务配置

// 项目和任务配置 grunt.initConfig({   pkg: grunt.file.readJSON('package.json'), //获取 package.json 中的元数据(js代码)   proj:{     name:'hello',     description:'a hello demo'   },   hello: {     options: {       name: '<%= proj.name %>'  //用<% %>模板字符串匹配hello     },     srcs: ['1.txt', '2.txt']   } });

在grunt.initConfig 方法中配置的属性,在任务模块中,可用grunt.config方法进行访问,例如:

grunt.config("proj.name");

另外,grunt任务模块会自动根据任务名来提取配置对象中和任务名对应的属性,比如定义任务hello,则在配置对象对应的属性"hello"中配置任务执行函数中所需用到的配置和数据。

五、加载grunt插件任务

为了减少重复劳动,我们可以加载已有的插件任务。

1.加载自己私有的grunt插件

可将自己定义的一些task脚本放在同一个目录下,通过grunt.loadTasks方法从指定目录加载该目录下所有的grunt任务脚本。

2.加载在npm中发布的grunt插件

像 grunt-contrib-copy和grunt-contrib-uglify这些常用的任务都已经以grunt插件的形式被开发出来了,且被发布在npm公开库中,只要在 package.json 文件中将需要使用的插件列在dependency中,并通过npm install安装之后,就可以直接加载该任务。

// 加载能够提供"copy"任务的插件。 grunt.loadNpmTasks('grunt-contrib-copy');

3.直接加载所有以"grunt-"打头的插件

//Load grunt tasks from NPM packages load-grunt-tasks

六、自定义任务

1.直接定义任务的行为

grunt.registerTask('hello', 'Show some msg', function() {   console.log(this.options().name); //输出hello });

2.定义为任务列表

可以将一个任务定义为一系列任务的组合,这一系列任务将按照顺序执行。

grunt.registerTask('dothings', 'copy and Show some msg', ['copy','hello']);

3.定义默认任务

通过定义 default 任务,可以让Grunt默认执行一个或多个任务。执行 grunt 命令时如果不指定一个任务的话,将会执行默认任务。如进行下面定义的话执行grunt 相当于执行grunt hello。

grunt.registerTask('default', ['hello']);

4.定义复合任务

registerMultiTask方法可以定义一个复合任务,复合任务将会对grunt.initConfig 方法中配置的相应属性中除了options外定义的属性依次作为target:data对进行处理。

module.exports = function(grunt) {     grunt.initConfig({         Log: {             options: {                 sep: ';'             },             srcs: ['1.txt', '2.txt'],             dests: ['d1.txt', 'd2.txt']         }     });     grunt.registerMultiTask("Log", function() {         var options = this.options({ sep: '&' });         console.log(this.target);          console.log(this.data.join(options.sep));     }); };

执行grunt Log将会输出:

Running "Log:srcs" (Log) tasksrcs1.txt;2.txtRunning "Log:dests" (Log) taskdestsd1.txt;d2.txt

定义任务行为Tips

1.任务内部可以执行其他的任务。

grunt.registerTask('mytask', function() {   grunt.task.run('task1', 'task2');   // Or:   grunt.task.run(['task1', 'task2']); });

2.定义异步任务

grunt.registerTask('mytask', function() {   var done = this.async();   //do something   done(); });

3.当任务失败时,所有后续任务都将终止

在任务中,当执行失败,可以return false来表明当前任务执行失败,一般,多个任务按顺序执行,如果有任务失败时,所有后续任务都将终止。可以通过在命令行后加上--force来使有任务失败时,后续任务能继续进行。

4.任务中检查前置任务状态

有些任务可以依赖于其他任务的成功执行。通过grunt.task.requires方法来检查其前置任务是否已经执行,并且没有失败。

5.任务中检查配置属性

可以用方法grunt.task.requiresConfig指定一个或者多个字符串或者数组的配置属性为必需的。如果一个或多个必需的配置属性缺失,就通知系统当前任务失败。

本文来自 js教程 栏目,欢迎学习!

以上就是js模块化开发—Gruntfile.js详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: Gruntfile.js
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:jQuery如何动态添加删除CSS样式?(代码示例)

相关资讯