使用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 相关文章推荐
prototype 源码中文说明之 prototype.js
Sep 22 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
Apr 18 Javascript
javascript ajax 仿百度分页函数
Oct 29 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
javascript简单写的判断电话号码实例
May 24 Javascript
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
微信小程序的部署方法步骤
Sep 04 Javascript
socket在egg中的使用实例代码详解
May 30 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
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
php获取url参数方法总结
2014/11/13 PHP
php利用事务处理转账问题
2015/04/22 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
jquery的键盘事件修改代码
2011/02/24 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
Python中List.index()方法的使用教程
2015/05/20 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
浅谈django channels 路由误导
2020/05/28 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
橄榄树药房:OLIVEDA
2019/09/01 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
模范教师材料大全
2014/12/16 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
信仰观后感
2015/06/03 职场文书
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS