Grunt + Bower—前端构建利器

  目前比较流行的WEB开发的趋势是前后端分离。前端采用重量级的Javascript框架,比如Angular,Ember等,后端采用restful API的Web Service服务,通过JSON格式进行数据交互。

  对于后端服务语言来说,不论是Ruby的rake,Java中的Maven或Gradle,或是Scala中的SBT,他们都能够提供编译运行、运行测试、打包部署、依赖管理等功能。再加上强大的package系统,让它可以插拔式的使用很多强大的功能,像数据迁移工具(liquibase),测试覆盖率package以及一些代码样式检查的工具。

  但是对于前段Javascript和CSS而言,很少有工具可以做到前面所述功能的集合。那么我们怎么样才能达到前面所说的说有功能呢?——Grunt + Bower

  Grunt号称自己是JavaScript世界的构建工具,它提供了强大的自动化功能。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻我们的劳动。Grunt同样拥有强大的package系统,你所需要的大多数task都已经作为Gruntpackage被开发了出来,并且每天都有更多的package诞生。

  但这还不够完美。

  我们知道,在JavaScript开发当中,我们经常需要引入大量的开源工具。不可避免的会遇到不同版本之间的兼容性问题,例如Bootstrap所依赖的JQuery不是1.10,而是2.03。如果你正在做JS版本升级,那么我想你一定会到各个网站上把他们最新的包下载下来,然后小心翼翼的替换它的版本。但是这些功能在Gradle和其他后端的版本管理工具里已经不再是问题。Bower的出现,完美的解决了这一难题。

  在javascript的世界里,很多东西都是由社区提供的,所以每一种工具都相当独立。比如,工具都有着自己独立的配置文件,自己的命令行参数,有时候还需要有一些额外的package把两个工具结合起来。所以下面将会有很多命令,我们需要一一了解。不过好在我们了解之后,下次就可以使用已经配置好的文件,通过几条命令将把有的东西都准备好,很方便。

第一步:安装nodejs

在Mac中,我们可以使用brew来安装。在其它系统下,请使用相应的工具或直接到官网下载。

brew install node

Nodejs可以让我们在服务器端使用javascript编程,它是很多js工具的基础。请确保它是最新的:

brew upgrade node

Npm是node官方提供的包依赖管理工具。我们下面使用的Grunt,Bower等,都是以package形式下载安装的。当我们安装好nodejs后, npm 就自动可用了。查看版本:

npm -v

接下来新建一个目录grunt_bower,然后运行npm init,根据提示,最后会产生一个package.json如下:

{"name": "grunt_bower","version": "1.0.0","description": "This is for grunt and bower","main": "index.js",  "repository": {"type": "git","url": "https://github.com/yeahyangliu/grunt_bower.git"}
}

第二步:安装Grunt

你需要先将Grunt命令行(CLI)安装到全局环境中。安装时可能需要使用sudo:

npm install -g grunt-cli

上述命令执行完后,grunt 命令就被加入到你的系统路径中了,以后就可以在任何目录下执行此命令了。

注意,安装grunt-cli并不等于安装了 Grunt!Grunt CLI的任务很简单:调用与Gruntfile在同一目录中 Grunt。这样带来的好处是,允许你在同一个系统上同时安装多个版本的 Grunt。

在Grunt项目里一般需要在你的项目中添加两份文件:package.json 和 Gruntfile。其中package.json中里面已经包含了一些Grunt常用的package,比如 grunt-contrib-jshint 等,我们可根据需要删减一些用不上的。那么现在我们的文件应该长成这样:

{"name": "grunt_bower","version": "1.0.0","description": "This is for grunt and bower","main": "index.js","engines": {"node": ">= 0.10.0"},"devDependencies": {"grunt": "~0.4.5","grunt-contrib-jshint": "~0.10.0","grunt-contrib-watch": "~0.6.1","grunt-contrib-qunit": "~0.5.2","grunt-contrib-concat": "~0.4.0","grunt-contrib-uglify": "~0.5.0"}"repository": {"type": "git","url": "https://github.com/yeahyangliu/grunt_bower.git"},"author": "Yang Liu"  
}

下面,我们需要一个gruntfile,gruntfile中定义了package的功能,并且可以自定义一些任务来管理我们Javascript代码。通过执行下面命令生成一个gruntfile:

npm install grunt-init -g
git clone https://github.com/gruntjs/grunt-init-gruntfile.git ~/.grunt-init/gruntfile
grunt-init gruntfile

接下来只需要把所有package.json中的package通过npm装在本目录,我们就可以使用Grunt来帮我们运行,管理我们的Javascript代码了。

第三步:安装Bower

Bower跟npm在某种意义上相似,它是用来管理常用的js库的依赖的,比如jquery, underscore, angularjs等。同样我们可以通过npm安装它:

npm install bower -g

同样,Bower也有自己的配置文件bower.json

{name: 'grunt_bower',version: '0.0.0',authors: ['YANG Liu <yeah_yangliu@163.com>'],license: 'MIT',ignore: ['**/.*','node_modules','bower_components','test','tests']
}

接下来就是我们见证奇迹的时刻:

bower install angularjs --save
bower insall jquery --save

我们就可以看到angular和JQuery已经被下载到本地。同时bower.json中多了两个依赖:

"dependencies": {  "angularjs": "~1.2.20",  "jquery": "~2.1.1"
}        

而且,我们的目录里,两个版本的js文件也被下载到了本地。如果你觉得现在已经大功告成了,那么你就错了,bower只负责把依赖下载到本地的 bower_components 目录,并不负责把它们拷贝到我们项目中实际使用的地方,比如 public/js/lib 目录下。

为了实现这样的功能,我们还需要另一个package的帮助:

npm install grunt-bower-task --save-dev

然后打开其文档,按照上面的提示进行配置。首先在 Gruntfile 中合适位置添加:

grunt.loadNpmTasks('grunt-bower-task');

然后在 grunt.initConfig({...}) 参数中,添加相应的配置项,把bower下载的js库拷贝到 public/js/lib 下:

{"bower": {   "install": { "options": {"targetDir": "./public/js/lib","layout": "byComponent","install": true,"verbose": false,"cleanTargetDir": false}}}
}

最后我们只需要运行一行简单的命令,就可以讲grunt和bower完美结合起来:

grunt bower

最后

有了这样两大利器,我们已经达到了从管理依赖,编译部署,压缩打包,运行测试的所有功能,并且非常清晰的配置,让项目上的人都拥有同一份配置,这种方式,大大的简化了团体的管理效率和维护成本,非常值得推崇!

再次感谢大家读到这里。

 

本文github地址:https://github.com/yeahyangliu/grunt_bower.git

 

转载于:https://www.cnblogs.com/Alex--Yang/p/4217577.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache服务器性能诊断,Apache服务器性能评测

。51Testing软件测试网m#z"fX}0H:P{(bHP~bd7h5z7I(Sn3H01.比较现有T2000 Apache2.2.8经过优化前后的效果51Testing软件测试网 R4VsR^4MO!G7fWebserver IP&#xff1a;10.56.234.3151Testing软件测试网e{]Q/\(p|优化前httpd.conf&#xff1a;da*Z"[d0----------------…

Linux命令行编辑快捷键

2019独角兽企业重金招聘Python工程师标准>>> ctrl ? 撤消前一次输入 ctrl c 另起一行 ctrl r 输入单词搜索历史命令 ctrl u 删除光标前面所有字符相当于VIM里d shift^ ctrl k 删除光标后面所有字符相当于VIM里d shift$ 删除 ctrl d 删除光标所在位置上的字符…

kali装电脑_Kali Linux可以安装到平板电脑吗?

在用Windows的电脑上克隆Kali插入U盘.运行Win32 Disk Imager.选择Kali Linux ISO文件作为被克隆的文件,然后核实要克隆的U盘是否正确.克隆完成后,从Windows机器安全弹出U盘.现在你可以用U盘启动Kali Linux了.在用Linux的电脑上克隆Kali在Linux环境下制作可启动的Kali Linux U盘…

思科查看服务器启动配置文件,启动配置检查UCS

本文解释如何使用UCS将启动功能和命令迅速执行配置状态检查。UCS将启动功能允许用户迅速执行一粗略检查为了保证刀片适当地配置允许BIOS继续。意志启动配置检查是验证CPU和DIMM配置。此检查迅速帮助用户调试启动问题。思科UCS在意志启动配置检查提供几个工具帮助。这些工具包括…

lnmp下配置虚拟主机

一&#xff1a;首先熟悉几个命令 which php ---> which是通过 PATH环境变量到该路径内查找可执行文件&#xff0c;所以基本的功能是寻找可执行文件 whereis php ----> 将和php文件相关的文件都查找出来 service php-fpm/nginx/mysqld restart 重启服务 二&…

AssetBundle.CreateFromFile的有趣事情

有趣的事情发生了&#xff1a; [MenuItem("AssetBundles/Build AssetBundles")] staticvoid BuildABs () { AssetBundleBuild[] buildMap new AssetBundleBuild[1]; buildMap [0].assetBundleName "test.assetbundle";//打包的资源包名称 string[] resou…

[cocos2dx笔记010]用于UI的事件管理器

cocos2dx有一个编辑器&#xff1a;cocostudio。眼下来说&#xff0c;已经是比較好用了。仅仅要载入导出的资源。就能够用上了。省去手动搭建面的麻烦。可是。非常多须要事件的地方&#xff0c;操作比較麻烦&#xff0c;所以这里提供一个事件管理器来集中和简化管理事件。对于C事…

异形3×3魔方还原教程_【理论篇】三阶魔方4.33千亿亿种变化是怎么计算出来的?...

本篇文章主要介绍三阶魔方总状态数是如何计算出来的&#xff0c;并介绍了两种算法&#xff0c;尽量保证语言通俗易懂&#xff0c;不涉及高深的理论知识&#xff08;当然我也不懂&#xff1a;P&#xff09;一、4.33千亿亿到底有多大&#xff1f;我们都知道三阶魔方的总变化状态数…

Jquery 对话框确认

$("#aa").click(function(){if(confirm("是否继续")){$(#aa).fadeOut(500);} }) 转载于:https://www.cnblogs.com/chen-lhx/p/5149469.html

datazen Active Directory AD 配置

今天苦心经营的datazen 链接AD&#xff0c;文档已经无法吐槽了简单的几句话&#xff0c;根本不够用。 先说一下链接AD 的好处吧&#xff0c; 1 首先免去设置密码的麻烦&#xff0c;因为直接用AD账号的密码。 2 更安全&#xff0c;因为客户可不想自己的自己的系统&#xff0c;开…

Android CardView卡片布局 标签: 控件

CardView介绍 CardView是Android 5.0系统引入的控件&#xff0c;相当于FragmentLayout布局控件然后添加圆角及阴影的效果&#xff1b;CardView被包装为一种布局&#xff0c;并且经常在ListView和RecyclerView的Item布局中&#xff0c;作为一种容器使用。CardView应该被使用在显…

橱柜高度与身高对照表_下一套房子装修,橱柜就照这样打,布局尺寸这么详细,不信不好用...

闲在家的时候&#xff0c;动手给自己做一顿色香味俱全的美食&#xff0c;是一个享受的过程。享受的&#xff0c;不仅仅是味蕾的体验&#xff0c;择菜、洗菜、切菜、下锅...每一个环节都是。不过&#xff0c;这取决于你是否有一个好厨房&#xff1b;而厨房最最最重要的家具&…

DOSbox汇编集成环境下的具体设置

altenter能够全屏幕&#xff0c;假设认为游戏执行速度不合适&#xff0c;能够改动 cycles3000 。将3000适当调整大小。 3。执行 DOSBox&#xff0c;会打开两个 DOS 窗体。我们仅仅需在例如以下窗体中键入 mount c h:\pal 此命令的作用为将 h:\pal 挂载为 C 盘&#xff0c;h:\p…

.NET手记-JS获取Url参数

最近为App做活动专区&#xff0c;其中很多活动都是采用html 5页面来制作的。一方面体量较小&#xff0c;制作快速&#xff0c;更新维护容易&#xff1b;另一方面&#xff0c;嵌入App后适配效果也不会很差。 这里我们采用混编形式来从native app传参给web页面&#xff0c;我们采…

Entity Framework系列之DataBase First

第一步 新建数据库和表 USE [TestDB] GO /****** Object: Table [dbo].[T_User] Script Date: 01/14/2015 20:27:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_User]([Id] [int] IDENTITY(1,1) NOT NULL,[Name] [nvarchar](50) NUL…

axios打包放到服务器上接口地址404_如何把网页文件放到云虚拟主机

把网页文件放到云虚拟主机上&#xff0c;可以用虚拟主机控制面板、FTP软件等方式。我们在运营网站时&#xff0c;经常需要制作一些特殊网页文件&#xff0c;比如404页面、sitemap页面、robots文件等&#xff0c;以及像站长平台严重文件、统计代码验证文件等&#xff0c;这些页面…

cisco数据中心理论小记-3

port channelSTP-防环,非根非指定口block.PCH-带宽利用率提升&#xff0c;逻辑上单链路 l2/l3都可以使用passive -LACP /active-Lacp/ on-Static无协议-on有协商-LACPneuxs 不支持PACPvPC---纯二层 技术&#xff0c;没有三层功能vitrual Port channel解决的是跨框 &#xff0c;…

-----------最小生成树----------------

最小生成树(Minimum Spanning Tree) 1:是一棵树(是一种特殊的图) 连通的,没有回路 有V 个顶点 一定有 V-1条边 2:生成树 包含了全部的顶点,所有的V-1条边 都在图里 剩下的三个土 都是第一个完全图的生成树 只要是 4个顶点 3条边 没有回路 就是生成树 这3个图 随便的加一…

jQuery Easing 使用方法及其图解

从jQuery API 文档中可以知道&#xff0c;jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数&#xff1a; properties&#xff1a;一组包含作为动画属性和终值的样式属性和及其值的集合duration(可选)&#xff1a;动画执行时间&am…

可以进行单元测试么_前端与单元测试

先来几个专业词汇&#xff0c;这样显得高大上一点&#xff08;不存在的。&#xff09;BDD: Behavior-Driven Development (行为驱动开发)TDD: Test-Driven Development (测试驱动开发)ATDD: Acceptance Test Driven Development(验收测试驱动开发)好&#xff0c;说完了&#xf…