使用Grunt.js管理你项目的应用说明


Posted in Javascript onApril 24, 2013

Grunt.js是什么?
Grunt.js是一个Javascript Task Runner(Javascript任务运行器),其基于NodeJS,可用于自动化构建、测试、生成文档的项目管理工具。

Grunt.js并不是仅仅是构建工具,实际上他只是任务运行器,管理每个子任务的自动化运行,我们还能使用他做更多东西。
 

为什么使用Grunt.js?
简单的说:为了自动化。
对于前端项目,例如:

•为了明确模块分工,我们可能会将Javascript代码拆成很小很小的一个个js文件,但是我们知道,在最终页面上,我们知道过多的js文件会产生过多的Http Request,这不利于页面优化。所以我们可能希望可以合并这些js文件的工具。
•为了用户端请求的文件尽量小,我们希望我们的HTML、Javascript等文件能进行压缩。
•我们可能需要对源代码进行一些单元测试和回归测试。
•我们可能希望有工具能够通过源代码备注自动生成文档,免得手动再写文档。
•……
很明显,这一切都有各种各样的小工具能帮我们做到,但是我们希望最好能输入一个命令,打开一个程序,或者干脆每次修改文件保存后自动进行这一切事情。

以前我们可能使用NodeJS自己写一个build程序,但是现在Grunt.js能够提供我们需要的一切。

安装Grunt.js
Grunt.js 0.4之后,其不再使用全局方式安装整个Grunt.js,而是在全局安装Grunt.js Client,然后在当前项目中安装Grunt,来避免未来不同项目对Grunt不同版本的依赖关系。

如果安装了之前的版本,可以使用npm的命令来删除掉原来的Grunt.js。

npm uninstall -g grunt
然后安装Grunt.js Client:

npm install -g grunt-cli
 

package.json
package.json是项目的配置文件,有一些项目的依赖信息,以及作者、版本等信息。我们先写一个简单的package.json。

{
  "name": "my-project",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1"
  }
}

name属性,表示该项的名字。

version属性,则是该项目的版本号。

devDependencies属性,则包含该项目的依赖,目前我们的依赖只有grunt,以及版本为0.4.1。
在终端大概包含该package.json的目录,输入命令:

npm install
我们会发现,该目录此时多了一个node_modules文件夹,里面有个grunt文件夹,这个就是我们安装在项目的Grunt.js。

用Grunt.js进行压缩js代码
grunt-contrib-uglify是Grunt.js的一个任务模块,其基于著名的js压缩工具uglify,进行js压缩任务。

首先我们在项目依赖加上grunt-contrib-uglify,package.json如下:

{
  "name": "my-project",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-uglify": "~0.2.0"
  }
}

再使用:

npm install
我们就安装了grunt-contrib-uglify了。

写Gruntfile.js

module.exports = function(grunt) {
    // 给grunt添加些设置
    grunt.initConfig({
        uglify: {
            options: {
                banner: '/*! 版权所有,这里乱写 */\n'
            },
            build: {
                src: 'src/core.js', //要压缩的源文件,我们也可以用*表示通配,比如'src/*.js'
                dest: 'dst/core.js' //压缩后输出的位置
            }
        }
    });
    // 载入 "uglify" 插件任务
    grunt.loadNpmTasks('grunt-contrib-uglify');
    // 定义默认需要执行的任务
    grunt.registerTask('default', ['uglify']);
};

Gruntfile.js文件用于定义任务,以及任务组的执行顺序等。上面的文件我们定义将src/core.js文件压缩后输出成dst/core.js。则我们输入命令:

grunt
的时候,则会自动完成这个任务。

Javascript 相关文章推荐
为javascript添加String.Format方法
Aug 11 Javascript
jquery批量控制form禁用的代码
Aug 06 Javascript
js获取判断上传文件后缀名的示例代码
Feb 19 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
JS实现的文件拖拽上传功能示例
May 21 Javascript
解决vue打包css文件中背景图片的路径问题
Sep 03 Javascript
vue项目打包上传github并制作预览链接(pages)
Apr 19 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 #Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 #Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
Apr 24 #Javascript
Dom 学习总结以及实例的使用介绍
Apr 24 #Javascript
jQuery 关于伪类选择符的使用说明
Apr 24 #Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 #Javascript
Jquery实现三层遍历删除功能代码
Apr 23 #Javascript
You might like
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
php实现的RSS生成类实例
2015/04/23 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
php7下的filesize函数
2019/09/30 PHP
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
django之session与分页(实例讲解)
2017/11/13 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
通过代码实例了解Python sys模块
2020/09/14 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
工业学校毕业生自荐信范文
2014/01/03 职场文书
2014企业年终工作总结
2014/12/23 职场文书
事业单位个人总结
2015/02/12 职场文书
英语教师求职信范文
2015/03/20 职场文书
网络研修随笔感言
2015/11/18 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python制作表白爱心合集
2022/01/22 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android