使用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 判断客户端浏览器类型代码
Mar 01 Javascript
JavaScript中链式调用之研习
Apr 07 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
May 10 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
easyui-datagrid特殊字符不能显示的处理方法
Apr 12 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
Aug 24 Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 Javascript
JS封装cavans多种滤镜组件
Feb 15 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
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
使用Python对Csv文件操作实例代码
2017/05/12 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
11月红领巾广播稿
2014/01/17 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
关于的python五子棋的算法
2022/05/02 Python