使用GruntJS构建Web程序之构建篇


Posted in Javascript onJune 04, 2014

大概有如下步骤

    新建项目Bejs
    新建文件package.json
    新建文件Gruntfile.js
    命令行执行grunt任务

 一、新建项目Bejs

源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会自动生成。

使用GruntJS构建Web程序之构建篇

二、新建package.json

package.json放在根目录下,它包含了该项目的一些元信息,如项目名称、描述、版本号,依赖包等。它应该和源码一样被提交到svn或git。 现在的项目结构如下

使用GruntJS构建Web程序之构建篇

package.json内容需符合JSON语法规范,如下

{
  "name": "Bejs",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.0",
    "grunt-contrib-jshint": "~0.1.1",
    "grunt-contrib-uglify": "~0.1.2",
    "grunt-contrib-concat": "~0.1.1"
  }
}

devDependencies中的grunt在前一篇已经安装了,grunt-contrib-jshint/grunt-contrib-uglify/grunt-contrib-concat则没有安装。三个分别对于三个任务(task)

    grunt-contrib-jshint js语法检查
    grunt-contrib-uglify 压缩,采用UglifyJS
    grunt-contrib-concat 合并文件

此时,打开命令行工具进入到项目根目录,敲如下命令: npm install

使用GruntJS构建Web程序之构建篇

使用GruntJS构建Web程序之构建篇

使用GruntJS构建Web程序之构建篇

再查看根目录,发现多了个node_modules目录,包含了四个子目录,见图

使用GruntJS构建Web程序之构建篇

三、新建文件Gruntfile.js

Gruntfile.js也是放在项目根目录下,几乎所有的任务都定义在该文件中,它就是一个普通的js文件,里面可以写任意js代码而不仅局限于JSON。和package.json一样它也要和源码一样被提交到svn或git。

使用GruntJS构建Web程序之构建篇

Gruntfile.js由以下内容组成

    wrapper函数,结构如下,这是Node.js的典型写法,使用exports公开API

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

   项目和任务配置
   载入grunt插件和任务
   定制执行任务

该示例完成以下任务

    合并src下的文件(ajax.js/selector.js)为domop.js
    压缩domop.js为domop.min.js
    这两个文件都放在dest目录下

最终的Gruntfile.js如下

module.exports = function(grunt) {
    // 配置
    grunt.initConfig({
        pkg : grunt.file.readJSON('package.json'),
        concat : {
            domop : {
                src: ['src/ajax.js', 'src/selector.js'],
                dest: 'dest/domop.js'
            }
        },
        uglify : {
            options : {
                banner : '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
            },
            build : {
                src : 'dest/domop.js',
                dest : 'dest/domop.min.js'
            }
        }
    });
    // 载入concat和uglify插件,分别对于合并和压缩
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    // 注册任务
    grunt.registerTask('default', ['concat', 'uglify']);
};

四、执行grunt任务

打开命令行,进入到项目根目录,敲 grunt

使用GruntJS构建Web程序之构建篇

从打印信息看出成功的合并和压缩并生成了dest目录及期望的文件,这时的项目目录下多了dest,如下

使用GruntJS构建Web程序之构建篇

ok,这里介绍了2个常见任务concat和uglify,jshint等没有介绍。Gruntfile.js里的代码也没有一一解读,感兴趣的同学可在gruntjs的官方文档找到。

Javascript 相关文章推荐
Javascript实现的鼠标经过时播放声音
May 18 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
jquery按回车提交数据的代码示例
Nov 05 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
js实现选中页面文字将其分享到新浪微博
Nov 05 Javascript
基于node.js依赖express解析post请求四种数据格式
Feb 13 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
Nov 02 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
Dec 04 Javascript
使用GruntJS构建Web程序之安装篇
Jun 04 #Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 #Javascript
动态读取JSON解析键值对的方法
Jun 03 #Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 #Javascript
jquery css 设置table的奇偶行背景色示例
Jun 03 #Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 #Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 #Javascript
You might like
我的论坛源代码(十)
2006/10/09 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
Python 命令行参数sys.argv
2008/09/06 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
美国在线工具商店:Acme Tools
2018/06/26 全球购物
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
国际政治个人自荐信范文
2013/11/26 职场文书
致共产党员倡议书
2014/04/16 职场文书
小学毕业感言100字
2015/07/30 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android