Gulp简介

Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。Gulp.js是基于 Node.js构建的,利用Node.js流的威力,你可以快速构建项目。

安装Gulp

1、全局安装Gulp:

npm install --global gulp

2、作为项目的开发依赖(devDependencies)安装:

npm install --save-dev gulp

小贴士

使用过Gulp的人会碰到一个问题,明明全局已经安装了Gulp和Gulp的插件,但是在项目中执行Gulp命令会出现如下错误:

Local gulp not found in ~\your-path

这是为什么呢?

其实这是Gulp故意设计的,原因是为了版本和依赖的控制。意思就是当别人Fork你代码,或者你过段时间拷贝到别的电脑上再gulp的时候,能控制gulp的版本

和其他插件的版本。

同时,这也是为了方便你在不同的项目中使用不同版本的gulp,如果仅在全局装一个 gulp 所有的项目就只能使用同一个版本的 gulp 了。

全局安装用于在命令行中使用gulp命令执行gulp的任务,本地安装是由于每个gulpfile.js都依赖gulp,该文件中依赖的gulp会直接从项目的node_module文件去找。

本地安装并记录在package.json的devDependencies下,能保证所以引用你项目的人都能用同个版本的gulp。另外,使用package.json中scripts来执行gulp命令

的话可以无需安装全局包。

在这里可以看看大家的讨论:

Why do we need to install gulp globally and locally?

Npm的包管理

当我们创建一个项目时,我们要现在项目中创建一个package.json文件,那么这个文件时干什么用的呢?

从字面意思和文件名称上看,我们就可以知道是包管理的配置文件。下面我们来说说这个配置文件如何创建和使用!

npm init创建package.json

对于很多刚开始学习gulp的人来说,对package.json一无所知,更比说创建了;网上有很多的模板,但是我们不能总是依赖于模板吧,万一哪天断网呢?

其实,官网已经想到了这一点,我们可以通过以下命令来创建:

nmp init

会出现以下提示:

这里让我们输入项目名称,我们输入我们的项目名称,比如myapp。然后回车继续...,

后面会让我们输入项目的版本(version),描述(description),入口(main)等信息。

Package.json 属性说明

  • name - 包名。
  • version - 包的版本号。
  • description - 包的描述。
  • homepage - 包的官网 url 。
  • author - 包的作者姓名。
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
  • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。
  • keywords - 关键字

有时候,我们fork别的代码时,会看到devDependencies这个配置项,关于devDependencies这个配置项,我们下面来专门讲他。

其实这个配置项是npm来管理的,当我们使用npm install命令来安装一些插件时,npm会自动的更新package.json加入依赖项。下面我们来实际操作一下,

首先,我们在D盘(哪个盘随意)下建个文件夹,比如gulpdemo,然后,"开始" -> "运行" -> "cmd",打开DOS命令窗口,执行cd命令,将路径定位到这个目录下。

既然package.json是管理依赖包的,那么我们第一步当然是添加package.json了。下面是具体的步骤:

  1. 在DOS窗口,输入npm init命令:
nmp init

然后,按照操作,一次输入配置信息,最后生成的package.json大概如下:

{
"name": "myapp",
"version": "1.0.0",
"description": "My web app",
"main": "index.html",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yunfeifei",
"license": "ISC"
}

这个每个人输入的信息不同,会或多或少少几项,这个没关系,我们可以参照上面的配置项说明来根据情况具体修改配置。

  1. 安装Gulp

上面我们已经说过,虽然已经全局安装过gulp,但是每个项目还是要基于项目依赖安装的,我们执行以下命令进行安装:

npm install --save-dev gulp

执行完命令,安装成功后,我们再来看看package.json文件,发现里面多了devDependencies这个配置:

{
"name": "myapp",
"version": "1.0.0",
"description": "My web app",
"main": "gulpfile.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yunfeifei",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1"
}
}

依赖标明了模块名称和版本号,这样方便以后别人使用,具体的使用方法随后会说明。

当我们发布项目的时候,并不会把gulp的模块都打包发布,只是发布我们的源代码和一些必要的配置文件。

就如.Net和Java的包管理工具一样,只生成一个配置文件,后面再由包管理工具进行解析、还原。

到这里,关于package.json的创建和使用相信大家已经清楚了,下面我们来介绍一下gulp常用的一些插件和使用方法。

Gulp常用插件和使用简介

Gulp常用的一些功能就是文件拷贝、文件重命名(gulp-rename)、文件合并(gulp-concat)、文件拷贝(gulp-copy)、文件删除(del)、文本替换(gulp-replace)、

js语法检测(gulp-jshint)、js压缩(gulp-uglify)、html压缩(gulp-htmlmin)、css压缩(gulp-clean-css)和图片压缩(gulp-imagemin)。

下面,写一个例子,实现js的语法检测和压缩合并功能,其他的插件和功能,大家可以通过网上找资料进行学习。

这个例子中我们要用到一下模块:

  • js语法检测(gulp-jshint)
  • js压缩(gulp-uglify)
  • 文件合并(gulp-concat)
  • 文件重命名(gulp-rename)

我们执行以下命令来安装这些模块:

npm install gulp-concat gulp-uglify gulp-rename jshint gulp-jshint --save-dev

安装成功后,我们在文件夹下新建gulpfile.js和js文件夹,目录结构如下:

gulpfile.js又称gulp入口文件,主要用来进行任务配置,告诉gulp需要进行哪些操作。

下面,我们修改gulpfile.js,写入以下代码:

var gulp = require('gulp'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
jshint = require('gulp-jshint'); //语法检查
gulp.task('jshint',function () {
return gulp.src('js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
}); //压缩,合并 js
gulp.task('minifyjs', function() {
return gulp.src('js/*.js') //需要操作的文件
.pipe(concat('main.js')) //合并所有js到main.js
.pipe(gulp.dest('js')) //输出到文件夹
.pipe(rename({suffix: '.min'})) //rename压缩后的文件名
.pipe(uglify()) //压缩
.pipe(gulp.dest('js')); //输出
}); //默认命令,在cmd中输入gulp后,执行的就是这个任务(压缩js需要在检查js之后操作)
gulp.task('default',['jshint'],function() {
gulp.start('minifyjs');
});

代码中都加了注释,相信大家都能看的懂,具体的语法和命令,大家可以去看看Gulp官网的API文档

然后,我们在js文件中新建两个js文件,index.js和common.js,分别写入一些代码,如下:

index.js

alert("hello,world");
function ShowAlert() {
alert("Hello,world!");
}

js和common.js

function ShowMessage() {
alert("Hello,this is a message!");
}

然后,我们在DOS窗口执行gulp命令,如图:

从图中我们可以看到,先执行了

执行完成后,我们会发现js目录中,多出了两个js文件,分别是main.js和main.min.js,其中main.js很明显是index.js和common.js合并后的内容。

main.min.js是main.js的压缩版。

开发环境中,我们肯定是要把生成目录和源代码目录分开的,这个为了减少操作,降低复杂度,让大家容易理解,所以只建了一个目录。

npm 解析依赖项

上面我们说了当我们创建项目时,npm会自动添加依赖模块配置到package.json,现在我们来说一下,如何使用这个package.json来还原依赖项。

上面我们写的一个小例子,假如我们要发给别人,我们会发现,他们直接执行gulp命令来执行任务,是无法执行成功的,提示缺少某些模块。

这个时候,我们在DOS下进入这个目录,执行npm install命令,npm就会读取package.js里面的依赖项,进行安装,然后我们就可以正常的执行gulp命令,

执行gulp任务了。

npm安装包失败的问题

国内的话,执行npm install包时,会出现卡住的现象,这个你不要问我为什么,我不会告诉你的!

我们可以使用的淘宝的npm镜像,用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

npm install -g cnpm --registry=https://registry.npm.taobao.org

其用法是和npm一样的。

第一次用博客园的Markdown编辑器,不是很顺手,无法加空白行,感觉不爽的,点击这里Gulp入门与解惑

=================================================================================================

作者:雲霏霏

QQ交流群:243633526

博客地址:http://www.cnblogs.com/yunfeifei/

Github地址:https://github.com/yunfeifei

Github博客:https://yunfeifei.github.io

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

如果大家感觉我的博文对大家有帮助,请推荐支持一把,给我写作的动力。

Gulp入门与解惑的更多相关文章

  1. Gulp入门教程(转载)

    本人转载自: Gulp入门教程

  2. (转)前端构建工具gulp入门教程

    前端构建工具gulp入门教程 老婆婆 1.8k 2013年12月30日 发布 推荐 10 推荐 收藏 83 收藏,20k 浏览 本文假设你之前没有用过任何任务脚本(task runner)和命令行工具 ...

  3. 《Gulp 入门指南》 : 使用 gulp 压缩 JS

    <Gulp 入门指南> : 使用 gulp 压缩 JS 请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 访问论坛获取帮助 压缩 js 代码可降低 js 文件大小,提高页面打 ...

  4. gulp 入门使用

      gulp 入门使用 使用场景 相信大家在传统的开发模式下 都是 html + css + js 然后静态文件不经过任何处理 部署到服务器,这样会有很多漏洞例如: 1.在网站上查看F12 就可以看到 ...

  5. 【转】Gulp入门基础教程

    Gulp入门基础教程 原文在此 前言最近流行前端构建工具,苦于之前使用Grunt,代码很难阅读,现在出了Gulp, 真是摆脱了痛苦.发现了一篇很好的Gulp英文教程,整理翻译给大家看看. 为什么使用G ...

  6. gulp入门与一些基本设置

    这里是gulp入门的一些操作,实现了编译sass文件.压缩.合并.添加版本号等基本功能. 友情提示,如果npm出现无法下载可以安装 cnpm.在安装完Nodejs 后 npm install cnpm ...

  7. gulp入门演练

    一直想学习下gulp看了蛮多资料,然后总是感觉是是而非,突然开窍了,把自己学会的过程给大家分享下,入门超级简单的 gulp安装 安装gulp 如果参数-g 表示全局安装 $ npm install g ...

  8. 前端小白的gulp入门

    gulp新手入门 全局安装 cnpm install -g gulp 本地安装cnpm install gulp -D 如果项目没有package.json,记得npm init 安装插件cnpm i ...

  9. gulp入门学习教程(入门学习记录)

    前言 最近在通过教学视频学习angularjs,其中有gulp的教学部分,对其的介绍为可以对文件进行合并,压缩,格式化,监听,测试,检查等操作时,看到前三种功能我的心理思想是,网上有很多在线压缩,在线 ...

随机推荐

  1. OC-Objection 学习笔记之一:简单的开始

    Objection 统一管理对象的引用问题,我想这就是这种技术的意义吧. 废话不说,咱们直接上步骤吧: 1:协议 我们的意识里要知道,一切围绕协议来进行. 下面的协议是一个视图的协议,该协议简单到不能 ...

  2. DevExpress控件学习总结(转)

    DevExpress控件学习总结   1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹 ...

  3. centos服务器设置代理上网的方法

    这里以centos7.0为例,记录代理服务器设置过程: 1.全局的代理设置: vi /etc/profile 添加下面内容 http_proxy = http://username:password@ ...

  4. ssh框架整合log4j

    这个是摘录的别人博客的地址,请点击下面的链接...... http://www.cnblogs.com/rushoooooo/archive/2011/08/29/2157361.html

  5. C,C++,VC++有什么区别

    C语言是一种古老而又经久不衰的计算机程序设计语言,大约诞生于上个世纪60年代.由于它的设计有很多优点,多年以来深受广大程序设计人员的喜爱,并逐渐淘汰了很多其它程序设计语言.我们平时使用的大多数软件都是 ...

  6. poj 1013(uva 608) Counterfeit Dollar

    #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #in ...

  7. Boost.Asio技术文档

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  8. Java中泛型数组的使用

    package com.srie.testjava; import java.util.ArrayList; import java.util.List; public class TestClass ...

  9. 2016年,总结篇 之 VueJS 如何入门(一)

    接着 2016 年的总结,我们来看看 2016年 国内最火且没有之一的前端MVVM 框架 VueJs 虽然 到写文章的这个时间点,VueJs已经发布了 2.1.x 了, 但是对于很多 Vuejs 的初 ...

  10. es6笔记5^_^set、map、iterator

    一.set 1.基本用法 数据结构Set类似于数组,但是成员的值都是唯一的,没有重复的值. let s = new Set(); [2,3,5,4,5,2,2].map(x => s.add(x ...