参考文献:http://blog.csdn.net/yuanyuan214365/article/details/53749583

1.安装nodejs:
nodejs nodejs安装路径随意 node-v

2.全局安装淘宝cnpm:
npm install cnpm -g --registry=https://registry.npm.taobao.org

3.全局安装gulp:
cnpm install gulp -g

4.项目文件根目录新建package.json:
新建package.json 执行命令cnpm init

5.安装gulp
注:全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能
5.1本地安装gulp:进入你的项目文件路径中后,执行cnpm install gulp --save-dev
安装gulp-sass插件
5.2安装sass:进入你的项目文件路径中后,执行cnpm install gulp-sass --save-dev

6.新建gulpfile.js
gulpfile.js是gulp的配置文件,放于根目录中。

//gulpfile.js 示例文件

//导入你所需要用的工具包 require('node_modules里对应模块')
var gulp = require('gulp'),
sass = require('gulp-sass'); // scss 任务
gulp.task('sass',function(){
return gulp.src('src/css/test.scss') //获取该任务需要的文件
.pipe( sass() ) //该任务调用的模块
.pipe( gulp.dest('src/css') ); //将在 src/css 文件夹中生产test.css
}); // 默认任务
gulp.task('default',['sass','watch1']); //监听文件
gulp.task('watch1',function(){
return gulp.watch('src/css/test.scss',['sass']);
//监听 src/css/test.scss 文件,修改时自动执行 sass 任务。
});

7.运行gulp

7.1 执行gulp 任务名称 运行该任务

gulp sass 执行gulpfile.js中的sass任务

7.2 执行gulp 调用default中的所有任务,开启监听事件,当 src/css/test.scss 发生修改时,会自动执行sass任务。

8常用插件

  1. sass的编译(gulp-sass)
  2. less编译 (gulp-less)
  3. 重命名(gulp-rename)
  4. 图片转换为base64-encoded (gulp-img64)
  5. 自动添加css前缀(gulp-autoprefixer)
  6. 压缩css(gulp-clean-css)
  7. js代码校验(gulp-jshint)
  8. 合并js文件(gulp-concat)
  9. 压缩js代码(gulp-uglify)
  10. 压缩图片(gulp-imagemin)
  11. 自动刷新页面(gulp-livereload,谷歌浏览器亲测,谷歌浏览器需安装livereload插件)
  12. 图片缓存,只有图片替换了才压缩(gulp-cache)
  13. 更改提醒(gulp-notify)
  14. 阻止 gulp 插件发生错误导致进程退出并输出错误日志(gulp-plumber)

9.关于匹配

  1. 列表内容

Gulp内部使用了node-glob模块来实现其文件匹配功能。我们可以使用下面这些特殊的字符来匹配我们想要的文件:

  • *匹配文件路径中的0个或多个字符,但不会匹配路径分隔符,除非路径分隔符出现在末尾
  • ** 匹配路径中的0个或多个目录及其子目录,需要单独出现,即它左右不能有其他东西了。如果出现在末尾,也能匹配文件。
  • ? 匹配文件路径中的一个字符(不会匹配路径分隔符)
  • [...] 匹配方括号中出现的字符中的任意一个,当方括号中第一个字符为^或!时,则表示不匹配方括号中出现的其他字符中的任意一个,类似js正则表达式中的用法
  • !(pattern|pattern|pattern) 匹配任何与括号中给定的任一模式都不匹配的
  • ?(pattern|pattern|pattern) 匹配括号中给定的任一模式0次或1次,类似于js正则中的(pattern|pattern|pattern)?
  • +(pattern|pattern|pattern) 匹配括号中给定的任一模式至少1次,类似于js正则中的(pattern|pattern|pattern)+
  • *(pattern|pattern|pattern) 匹配括号中给定的任一模式0次或多次,类似于js正则中的(pattern|pattern|pattern)*
  • @(pattern|pattern|pattern) 匹配括号中给定的任一模式1次,类似于js正则中的(pattern|pattern|pattern)

下面以一系列例子来加深理解

  • *能匹配 a.js,x.yabcabc/,但不能匹配a/b.js
  • *.*能匹配 a.jsstyle.cssa.bx.y
  • */*/*.js 能匹配 a/b/c.jsx/y/z.js,不能匹配a/b.jsa/b/c/d.js
  • ** 能匹配 abca/b.jsa/b/c.jsx/y/zx/y/z/a.b,能用来匹配所有的目录和文件
  • **/*.js 能匹配 foo.jsa/foo.jsa/b/foo.jsa/b/c/foo.js
  • a/**/z 能匹配 a/za/b/za/b/c/za/d/g/h/j/k/z
  • a/**b/z 能匹配 a/b/za/sb/z,但不能匹配a/x/sb/z,因为只有单**单独出现才能匹配多级目录
  • ?.js 能匹配 a.jsb.jsc.js
  • a?? 能匹配 a.babc,但不能匹配ab/,因为它不会匹配路径分隔符
  • [xyz].js 只能匹配 x.jsy.jsz.js,不会匹配xy.jsxyz.js等,整个中括号只代表一个字符
  • [^xyz].js 能匹配 a.jsb.jsc.js等,不能匹配x.jsy.jsz.js 
    当有多种匹配模式时可以使用数组

//使用数组的方式来匹配多种文件

gulp.src(['js/*.js','css/*.css','*.html'])
  • 1
  • 1

使用数组的方式还有一个好处就是可以很方便的使用排除模式,在数组中的单个匹配模式前加上!即是排除模式,它会在匹配的结果中排除这个匹配,要注意一点的是不能在数组中的第一个元素中使用排除模式

gulp.src([*.js,'!b*.js']) //匹配所有js文件,但排除掉以b开头的js文件
gulp.src(['!b*.js',*.js]) //不会排除任何文件,因为排除模式不能出现在数组的第一个元素中
  • 1
  • 2
  • 1
  • 2

此外,还可以使用展开模式。展开模式以花括号作为定界符,根据它里面的内容,会展开为多个模式,最后匹配的结果为所有展开的模式相加起来得到的结果。展开的例子如下:

  • a{b,c}d 会展开为 abdacd
  • a{b,}c 会展开为 abcac
  • a{0..3}d 会展开为 a0da1da2da3d
  • a{b,c{d,e}f}g 会展开为 abgacdfgacefg
  • a{b,c}d{e,f}g 会展开为 abdegacdegabdegabdfg

系统:win10 
终端工具:cmder(或使用系统终端:win+R -> 输入cmd -> 回车) 
gulp官网地址:http://www.gulpjs.com.cn/ 
gulp中文文档:http://www.gulpjs.com.cn/docs/ 
gulp插件地址:http://gulpjs.com/plugins 
gulpAPI地址:http://www.gulpjs.com.cn/docs/api/

1.安装node

window下,下载node安装即可。 
node下载地址:http://nodejs.cn/download/ 
安装比较简单,基本一直下一步即可,安装路径随意。

安装完成后,终端输入如下命令 显示版本号即安装成功。

node -v
  • 1
  • 1

2.推荐安装 cnpm

npm服务器在国外,网络影响大,甚至还会遇到需要翻墙才能下载插件的情况,因此推荐安装cnpm。

注:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。后面的演示均使用cnpm 
注:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。后面的演示均使用cnpm 
注:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。后面的演示均使用cnpm 
重要的事情说三遍

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

2.1安装cnpm

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

2.2检测cnpm是否安装成功

执行cnpm -v 显示版本号即安装成功 

3.全局安装gulp

3.1 全局安装gulp

执行cnpm install gulp -g

3.2检测gulp是否安装成功

执行gulp -v 显示版本号即安装成功 

4.项目文件根目录新建package.json

注:package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件重点内容

4.1进入你的项目文件

示例:进入 D:/WWW/test 项目文件夹中 

4.2新建package.json

执行命令cnpm init 

4.3检测package.json是否成功新建

查看项目文件根目录,是否新建package.json,且内容是否和你终端中输入的一致。 
package.json内容如下:

{
"name": "test",
"version": "1.0.0",
"description": "我是描述",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注:可不使用cnpm init方式,可选择手动创建package.json配置文件

5.本地安装gulp插件

5.1本地安装gulp

注:全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能

进入你的项目文件路径中后,执行cnpm install gulp --save-dev 

注:项目文件中多了 node_modules 文件夹,里面是你本地安装的插件

5.2安装gulp-sass插件

进入你的项目文件路径中后,执行cnpm install gulp-sass --save-dev

6.新建gulpfile.js(重要,重要,重要)

gulpfile.js是gulp的配置文件,放于根目录中。

//gulpfile.js 示例文件

//导入你所需要用的工具包 require('node_modules里对应模块')
var gulp = require('gulp'),
sass = require('gulp-sass'); // scss 任务
gulp.task('sass',function(){
return gulp.src('src/css/test.scss') //获取该任务需要的文件
.pipe( sass() ) //该任务调用的模块
.pipe( gulp.dest('src/css') ); //将在 src/css 文件夹中生产test.css
}); // 默认任务
gulp.task('default',['sass','watch1']); //监听文件
gulp.task('watch1',function(){
return gulp.watch('src/css/test.scss',['sass']);
//监听 src/css/test.scss 文件,修改时自动执行 sass 任务。
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

详细gulp api介绍,可参考官网:http://www.gulpjs.com.cn/docs/api/

7.运行gulp

7.1 执行gulp 任务名称 运行该任务 
示例:gulp sass 执行gulpfile.js中的sass任务 
 
7.2 执行gulp 调用default中的所有任务 
 
如图:开启监听事件,当 src/css/test.scss 发生修改时,会自动执行sass任务。 

8.常用插件

  1. sass的编译(gulp-sass)
  2. less编译 (gulp-less)
  3. 重命名(gulp-rename)
  4. 图片转换为base64-encoded (gulp-img64)
  5. 自动添加css前缀(gulp-autoprefixer)
  6. 压缩css(gulp-clean-css)
  7. js代码校验(gulp-jshint)
  8. 合并js文件(gulp-concat)
  9. 压缩js代码(gulp-uglify)
  10. 压缩图片(gulp-imagemin)
  11. 自动刷新页面(gulp-livereload,谷歌浏览器亲测,谷歌浏览器需安装livereload插件)
  12. 图片缓存,只有图片替换了才压缩(gulp-cache)
  13. 更改提醒(gulp-notify)
  14. 阻止 gulp 插件发生错误导致进程退出并输出错误日志(gulp-plumber)

9.关于匹配

  1. 列表内容

Gulp内部使用了node-glob模块来实现其文件匹配功能。我们可以使用下面这些特殊的字符来匹配我们想要的文件:

  • *匹配文件路径中的0个或多个字符,但不会匹配路径分隔符,除非路径分隔符出现在末尾
  • ** 匹配路径中的0个或多个目录及其子目录,需要单独出现,即它左右不能有其他东西了。如果出现在末尾,也能匹配文件。
  • ? 匹配文件路径中的一个字符(不会匹配路径分隔符)
  • [...] 匹配方括号中出现的字符中的任意一个,当方括号中第一个字符为^或!时,则表示不匹配方括号中出现的其他字符中的任意一个,类似js正则表达式中的用法
  • !(pattern|pattern|pattern) 匹配任何与括号中给定的任一模式都不匹配的
  • ?(pattern|pattern|pattern) 匹配括号中给定的任一模式0次或1次,类似于js正则中的(pattern|pattern|pattern)?
  • +(pattern|pattern|pattern) 匹配括号中给定的任一模式至少1次,类似于js正则中的(pattern|pattern|pattern)+
  • *(pattern|pattern|pattern) 匹配括号中给定的任一模式0次或多次,类似于js正则中的(pattern|pattern|pattern)*
  • @(pattern|pattern|pattern) 匹配括号中给定的任一模式1次,类似于js正则中的(pattern|pattern|pattern)

下面以一系列例子来加深理解

  • *能匹配 a.js,x.yabcabc/,但不能匹配a/b.js
  • *.*能匹配 a.jsstyle.cssa.bx.y
  • */*/*.js 能匹配 a/b/c.jsx/y/z.js,不能匹配a/b.jsa/b/c/d.js
  • ** 能匹配 abca/b.jsa/b/c.jsx/y/zx/y/z/a.b,能用来匹配所有的目录和文件
  • **/*.js 能匹配 foo.jsa/foo.jsa/b/foo.jsa/b/c/foo.js
  • a/**/z 能匹配 a/za/b/za/b/c/za/d/g/h/j/k/z
  • a/**b/z 能匹配 a/b/za/sb/z,但不能匹配a/x/sb/z,因为只有单**单独出现才能匹配多级目录
  • ?.js 能匹配 a.jsb.jsc.js
  • a?? 能匹配 a.babc,但不能匹配ab/,因为它不会匹配路径分隔符
  • [xyz].js 只能匹配 x.jsy.jsz.js,不会匹配xy.jsxyz.js等,整个中括号只代表一个字符
  • [^xyz].js 能匹配 a.jsb.jsc.js等,不能匹配x.jsy.jsz.js 
    当有多种匹配模式时可以使用数组

//使用数组的方式来匹配多种文件

gulp.src(['js/*.js','css/*.css','*.html'])
  • 1
  • 1

使用数组的方式还有一个好处就是可以很方便的使用排除模式,在数组中的单个匹配模式前加上!即是排除模式,它会在匹配的结果中排除这个匹配,要注意一点的是不能在数组中的第一个元素中使用排除模式

gulp.src([*.js,'!b*.js']) //匹配所有js文件,但排除掉以b开头的js文件
gulp.src(['!b*.js',*.js]) //不会排除任何文件,因为排除模式不能出现在数组的第一个元素中
  • 1
  • 2
  • 1
  • 2

此外,还可以使用展开模式。展开模式以花括号作为定界符,根据它里面的内容,会展开为多个模式,最后匹配的结果为所有展开的模式相加起来得到的结果。展开的例子如下:

  • a{b,c}d 会展开为 abdacd
  • a{b,}c 会展开为 abcac
  • a{0..3}d 会展开为 a0da1da2da3d
  • a{b,c{d,e}f}g 会展开为 abgacdfgacefg
  • a{b,c}d{e,f}g 会展开为 abdegacdegabdegabdfg

10.结束,参考文章

本文参考借鉴多篇文章 在 加上自己的实际测试后,写了这篇文章。 
如有不妥之处和疑问的地方,请留言赐教,谢谢。 
关于gulp的介绍,可参考官网: 
gulp官网地址:http://www.gulpjs.com.cn/ 
gulp中文文档:http://www.gulpjs.com.cn/docs/ 
gulp插件地址:http://gulpjs.com/plugins 
gulpAPI地址:http://www.gulpjs.com.cn/docs/api/ 
本文还参考了文章: 
http://www.cnblogs.com/2050/p/4198792.html 
http://www.ydcss.com/archives/18 
等等…

windows平台下node,npm,gulp配置的更多相关文章

  1. 【转】Windows平台下的Subversion安装配置新手指南

    原文地址:http://developer.51cto.com/art/201005/199628.htm 本文介绍Subversion安装配置快速指南,首先讲Subversion的安装和配置,Uni ...

  2. Windows平台下nginx跨域配置

    1)下载地址: http://nginx.org 2)启动 解压至d:\nginx,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹D:\n ...

  3. Windows平台下Flutter安装,配置,初运行。

    Flutter是什么?他是谷歌根据Dark语言开源的跨平台开发依赖.和目前比较火的Reactive Native一样,一套代码能够实现两个不同平台的App.那么为什么要介绍Flutter而不是在国内大 ...

  4. Windows平台下的node.js安装

    Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应 ...

  5. Windows平台下PHP开发环境的配置

    Windows平台下PHP开发环境的配置 一.基本环境 1.Windows XP 32位 2.Apache 2.2.25,下载地址:http://mirror.bit.edu.cn/apache/ht ...

  6. windows平台下spark-shell配置

    一.下载安装spark,http://spark.apache.org/,选择合适版本后下载到本地,解压,bin目录下spark-shell文件就是spark命令行交互的入口. 二.下载安装windo ...

  7. Windows平台下Git服务器搭建

    第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” = ...

  8. Windows 平台下Git 服务器搭建

    由于项目中一直在使用git作为版本管理,自己对git的理解.使用都还不是怎么的熟悉,所以准备深入了解一下git及一些常用命令的使用,于是干脆把服务端架上,通过自己的PC作为服务端同时作为客户端的角色进 ...

  9. windows平台下VLC2.0.5编译

    windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...

随机推荐

  1. AtCoder Beginner Contest 068

    A - ABCxxx 题意: 给出n,输出“ABCn”就可以了,纯水题. B - Break Number 题意: 给出n,找出从1到n的闭区间内能够被2整除最多次的数. 思路: 直接模拟. 代码: ...

  2. Unity3D 中材质球(Material)预制体打包成AB(AssetBundle)出现材质丢失问题的解决方案

    关于Unity3D中打AB(AssetBundle)资源包,默认是不连Shader一同打包进去的,所以得自行添加,添加方式比较简单,不需要往项目中添加Shader,只是点选一下就可以了,具体实现方式如 ...

  3. 数据结构随笔-php实现栈

    栈(Stack)满足后进先出(LIFO)的原则: 下面利用php实现栈的相关操作: 本实例栈的基本操作: 入栈(push):向栈内压入一个元素,栈顶指针指向栈顶元素 出栈(pop): 从栈顶去除元素, ...

  4. git版本控制 for window安装和命令行使用

    Git 安装配置 Windows 平台上安装 在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行 ...

  5. TCP/IP卷一:第一章

    ================================================= 版權聲明:如需轉載,請列明出處:HingAglaiaWong@博客園 支持原創,是對作者最好的的鼓勵 ...

  6. 【CPP】概览

    [使用C语言的七个步骤]1:定义程序目标  2:设计程序  3:编写代码  4:编译  5:运行  6:测试和调试  7:维护和修改 [程序细节] :#include 指示和头文件 include&l ...

  7. Java初学者:深度辨析"=="与equals的区别

    Java初学者:深度辨析"=="与equals()方法的区别 1.基本数据类型当中,"=="比较的是两个变量的值 int a=5; int b=4; 3 int ...

  8. 易云捷讯MySQL云数据库上线,推进IaaS与PaaS融合战略布局

    日前宣布,其基于MySQL的关系型云数据库已经正式上线公测,用户可通过易云管理控制台创建.监控与管理mysql数据库.此服务包括在线扩容.自动备份.灵活配置和监控告警等功能,旨在帮助用户实现便捷的运维 ...

  9. 云端TensorFlow读取数据IO的高效方式

    低效的IO方式 最近通过观察PAI平台上TensoFlow用户的运行情况,发现大家在数据IO这方面还是有比较大的困惑,主要是因为很多同学没有很好的理解本地执行TensorFlow代码和分布式云端执行T ...

  10. android 适配器 BaseAdapter 的学习

    昨天晚上看了下ArrayAdapter,和SimpleAdapter,今天早上起来看完了球赛,又继续要开始学习了,适配器除了前面的两种,还有一种常用的就是BaseAdapter,他是一个抽象类.事实上 ...