自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里打滚了两年的文艺小码农来说,也有自己的一些体会,今天就来分享一下自己基于Gulp编写的一个比较丑陋的前端开发环境,本人技术有限,有问题和意见请私下聊,勿喷:

  首先安装Node.js,至于怎么安装的话 ,自行度娘。安装完成之后在命令行里面输入下面两个命令,如果输出了版本号的话(这个是我自己电脑上的版本),OK那么恭喜你安装成功了

 node -v   v6.2.0
npm -v v3.8.9

安装好了Node环境后,接下来你应该通过npm来安装Gulp了

 npm install gulp -g
-g 代表的是全局安装,这样你到时候再任何目录下都可以跑gulp命令

但是你会发现在这个过程中可能会安装失败,为什么呢?,作为一个IT人员,在伟大的天朝 ,你懂得...,但是也不要灰心,人是高级动物,总归想到办法来解决的,这得感谢我们的马爸爸了,因为他的淘宝团队提供了一个镜像http://npm.taobao.org/

在这里你可以通过改变镜像源来快速的安装自己所需要的东西了,这个时候一般是通过如下的命令安装了

 cnpm install gulp

好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了,以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目

 win+R键(windows平台上)、Mac和Linux操作系统上,自己度娘;
cd yourFilename ( 进入你的文件目录 )
npm init ( 初始化 )

完了你就直接一直按回车键,当看到你的目录里面生成一个以.json格式结尾的文件时,OK你的初始化就完成了接着你在根目录下新建一个名叫gulpfile.js的js文件,我也不知道为啥叫这个名字,反正就是这样规定的, 先前gulp安装是在全局环境下,

那么现在gulp的安装就是在你目录下面安装了

 命令行运行 npm/cnpm install gulp  --save-dev
--save-dev ( 你安装的包会出现在你开发(dev)的依赖(Dependencies)里),这样方便以后你的项目如果别人也用的话,那么那个人只要 npm/cnpm install 一下,OK所以的插件都安装了,你不需要拷贝给他

到了这一步,在编辑器中打开刚才新建的gulpfile.js文件,写入如下的代码进行测试

 var gulp = require('gulp');
gulp.task('test',function(){ console.log('gulp 测试成功了!!' }) 在命令行运行 gulp test 回车 如果看到了控制台输出了那句话,OK,你的gulp的测试成功

好了到了上面这一步我们的准备工作都差不多了,我们接下来就来一个一个的安装插件,以及插件的基本使用,最后完成我们这个简单但实用的开发环境。关于Gulp的完整使用请点击这里http://www.gulpjs.com.cn/,这里不再讲解
对于一个项目来说的话,通常离不开模板编译、打包压缩,自动化部署等操作步骤,但是在这里我们重点讲解前面两项,好了回到命令行,开始撸代码,首先一个是html文件的编译依赖我们第一个使用的插件是 ``gulp-content-includer
gulp-rev-append``,在html文件中导入一些公共的模块和为页面中引入的js。css、img加上版本号

 命令行: npm/cnpm install gulp-content-includer --save-dev 在gulpfile.js 写如下的代码:
var gulp = require('gulp');// 引入 gulp
var contentIncluder = require('gulp-content-includer')
var rev = require('gulp-rev-append');
gulp.task('html', function() {
gulp.src(['src/module/**/*.html','!src/module/public/html/*.html'])
.pipe(contentIncluder({
includerReg:/<!\-\-include\s+"([^"]+)"\-\->/g
}))
.pipe(rev())
.pipe(gulp.dest('dest/'))
.pipe(browserSync.stream());
});

注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目录结构!!!!!!!!!!!!!(最后我会将源文件放到 github 上面,到时可以下载)

在根目录下新建一个src目录,再在src目录下面建一个module目录,在这个module目录里面放不同的模块包括公共的模块,比如我们这里有一个登录模块。那么我们新建一个login文件夹,里面放与登录相关的页面和静态文件,可能还会用到一些公共的,那么我们再建一个公共的文件夹叫public,这里面放公共的文件夹如图所示:

public目录下面我们新建了几个文件夹分别用来放公共的css、images、js、html,我们在login模块下新建一个index.html文件,分别引入头部和底部,如图所示:

在命令行运行: gulp html 完了后会在目录下多出一个文件,打开刚才编译过的html文件你会看到完整的编译成功 如图所示

那大家会问.pipe(rev())这个是干嘛的呢,这个是为js、css、img添加文件版本号的,如下图所示,

我们会发现引入的文件后面都多了一个版本号了,这个是为了防止浏览器产生缓存,只要文件改变,hash值会自动变,至此我们的第一个插件搞定

Html完了的话,应该是轮到css了吧,网上有很多都是关于怎么样用gulp去编译sass等文件,这里我要讲的是我们postcsss 点击去学习postcss吧http://www.w3cplus.com/blog/tags/516.html,去编写我们的css,然后编译,废话不多说,上代码

我们第二个,当然不止了,需要很多个配合使用 ``gulp-postcss(主要依赖模块) cssnex(使用CSS未来的语法) precss(编写Sass的函数) gulp-autoprefixer(处理浏览器私有前缀)gulp-sourcemaps(用于错误查找) gulp-minify-css(压缩css)

 命令行: npm/cnpm install gulp-postcss cssnex precss  gulp-autoprefixer gulp-minify-css gulp-sourcemaps  --save-dev

     在gulpfile.js 写如下的代码:

     gulp.task('css', function () {

          var processors = [

             autoprefixer,

             cssnext,

            precss
];
gulp.src(['src/module/**/css/*.css','src/module/public/css/*.css'])
.pipe(postcss(processors))
.pipe(autoprefixer({
browsers: ['last 2 versions', 'Android >= 4.0'],
cascade: true
}))
.pipe(gulp.dest('dest/'))
.pipe(browserSync.stream());
})

我们在login模块下面新建一个css文件如图所示,写上代码

在命令行运行: gulp css 在dest目录下打开刚才编译成功的样式文件 如图所示编译成功

上面只搞定了编译,那还有压缩,错误定位怎么办。我们再把刚才的代码稍微改一下

 gulp.task('css', function () {
var processors = [
autoprefixer,
cssnext,
precss
];
gulp.src(['src/module/**/css/*.css','src/module/public/css/*.css'])
.pipe(postcss(processors))
.pipe(autoprefixer({
browsers: ['last 2 versions', 'Android >= 4.0'],
cascade: true
}))
.pipe(minifycss())
.pipe(sourcemaps.init())
.pipe(sourcemaps.write())
.pipe(gulp.dest('dest/'))
.pipe(browserSync.stream());
})
我们再次编译你会发现生成的文件变了,变成下面这个样子了,要的就是这个效果

到此,css部分完成了,CSS部分完成了,该轮到JS了吧,js部分我主要依赖于这几个插件 `` gulp-babel(编译es6语法) gulp-uglify(压缩js)``

 命令行: npm/cnpm install gulp-babel gulp-uglify  --save-dev

 在gulpfile.js 写如下的代码:

       gulp.task('js', function () {
gulp.src(['src/module/**/js/*.js','!src/module/public/js/*.js'])
.pipe(babel({
presets: ['es2015']
}))
.pipe(uglify({
mangle: true, //fasle不混淆变量名 true为混淆
preserveComments: 'some' //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释) }))
.pipe(gulp.dest('dest/'))
.pipe(browserSync.stream())
.pipe(browserSync.stream());
});

我们在login模块下面新建一个js文件如图所示,写上如图代码

在命令行运行: gulp js 在dest目录下打开刚才编译成功的样式文件 如图所示

出现这样的结果就成功了,是不是觉得很简单啊

现在该轮到了图片了吧,图片也很简单,我们只用到了一个插件``gulp-imagemin( 图片压缩 )``

 命令行: npm/cnpm install gulp-imagemin  --save-dev

       在gulpfile.js 写如下的代码:

      gulp.task('images', function () {
gulp.src(['src/module/**/images/*.*','src/module/public/images/*.*'])
.pipe(imagemin({
optimizationLevel: 3,
interlaced: true,
progressive: true
}))
.pipe(gulp.dest('dest/'))
.pipe(browserSync.stream());
}); 在login目录下放入一张图片,然后命令行运行 gulp images 然后对比压缩前后图片的大小,就知道有没有成功了

拷贝public下面不需要编译的一些库和插件:

在项目中我们通常会依赖一些插件和js库,通常这些文件都是被编译压缩过后的,不需要再次编译压缩,所以我们直接拷贝过去就可以

 gulp.task('copyJs', function() {
gulp.src('src/module/public/js/**/*',{base: 'src/module/public/'})
.pipe(uglify({
mangle: true, //fasle不混淆变量名 true为混淆
preserveComments: 'some' //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
}))
.pipe(gulp.dest('dest/public'))
.pipe(browserSync.stream());
});

不知道大家有没有注意,每一个任务后面的加上了.pipe(browserSync.stream());这个是干嘛的呢,这就是接下来我们要讲到的,到这里是不是就完了呢?当然没有,我们写代码的时候不可能每次都去手动编译吧,那个太LOW了,我们要自动监听文件的编译压缩,对,就是这样

文件的自动编译压缩监听服务`browser-sync:http://www.browsersync.cn/

文件的译压缩监听服务我们依赖于``browser-sync(实时刷新)``这个插件通过这个插件我们可以在本地开启一个小的服务环境,每当文件改变的时候 ,就会自动处理,具体的使用请点击上面的链接,时间的原因就不在一一描述了

 命令行: npm/cnpm install browser-sync  --save-dev

     在gulpfile.js 写如下的代码:

     gulp.task('serve', ['css',"html","copyJs","js","images"], function() {
browserSync.init({
server: "./dest"
});
gulp.watch("src/module/**/css/*.scss", ['css']);
gulp.watch("src/module/**/*.html", ['copyHtml']);
gulp.watch("src/module/public/**/*", ['copyJs']);
gulp.watch("src/module/**/js/*.js", ['js']);
gulp.watch("src/module/**/images/*.*", ['images']);
gulp.watch("*.html").on('change', browserSync.reload);
});

到这里为止我们就差不多了,最后还有一个收尾工作,那就是用一个命令运行所有的任务,代码如下:

gulp.task('default', ['serve'])

前端工程话要做的事情有很多,不只是上面一点点,我作为一个刚入门的前端工程师花点时间来写这个东西,只是为了和大家共勉,后期我会继续完善代码,最后附上源代码https://github.com/huangzexia/gulp,更多问题请给我发邮件(huangzexiameishu@163.com),在github上下载下来后按照下面的命令

代码运行:

1、运行npm install

2、运行gulp

3、在浏览器中输入http://localhost:3000/login/index.html```

基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目的更多相关文章

  1. 基于gulp编写的一个简单实用的前端开发环境

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  2. 基于 Express+Gulp+BrowserSync 搭建一套高性能的前端开发环境

    基于 Express+Gulp+BrowserSync 搭建一套高性能的前端开发环境 Express 是比较经典的,也是最常用的 Nodejs Web框架. 一.Express 快速构建一个web应用 ...

  3. Windows 10快速在指定目录打开命令行

    一.我们在想要到达的目录上按住shift键并点击鼠标右键.看到了吗,这时候在弹出菜单里多了一个选项,就是"在此处打开命令窗口",我们点开看一下. 二.不过有时候我们需要以管理员的权 ...

  4. WIN7、WIN8 右键在目录当前打开命令行Cmd窗口(图文)

    Win7系统大家习惯“Win+R”的组合键打开命令提示符. 通常右击文件夹是没有进入命令行 进入某个文件夹里面,先按住Shift键,然后鼠标右键,出现选项“在此处打开命令窗口(W)”也可以打开命令行. ...

  5. WIN7右键在目录当前打开命令行Cmd窗口

    Win7系统大家习惯“Win+R”的组合键打开命令提示符. 2. 通常情况下,我们点击鼠标右键是没有命令行选项的.. 3.在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开命令窗口(W)” ...

  6. 右键在目录当前打开命令行cmd窗口

    Win7系统大家习惯“Win+R”的组合键打开命令提示符. 方法/步骤2 通常情况下,我们点击鼠标右键是没有命令行选项的. 方法/步骤3 在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开 ...

  7. Windows 桌面和文件夹的右键->打开命令行窗口

    Windows 桌面和文件夹的右键->打开命令行窗口 1.先按下shift,再点鼠标右键运行CMD,(不是管理员权限) 上图是我已经加了右键的,并且 系统设置了  ps代替cmd,所以是“在此处 ...

  8. windows小技巧 从文件夹直接打开命令行位置

    windows下从命令行打开某个目录下的东东时,会一直cd  ~~~~,更简单的是: 直接用鼠标找到该文件夹或者文件,按住Shift键然后点击鼠标右键,选择"在此处打开命令行"即可 ...

  9. Win10添加右键在此处打开命令行

    通过添加注册表项,实现右击“在此处打开命令行功能” 注册表位置:HKEY_CLASSES_ROOT\Directory\Background\shell\ win10系统用标识右键菜单打开命令行的键, ...

随机推荐

  1. Java之多线程

    一.简述进程与线程的关系   说到多线程就不得不说进程,那么什么是进程:简单的来说就是正在进行中的程序. 在windows中,我们可以直观的看到的正在运行中的程序,即进程,如图:

  2. Cacti+Nagios监控平台完美整合

    Cacti+Nagios监控平台完美整合 本博文出自51CTO博客吴光科博主,有任何问题请进入博主页面互动讨论!博文地址:http://wgkgood.blog.51cto.com/1192594/1 ...

  3. WP 开发中.xaml 与.xaml.cs

    关于 WP 开发中.xaml 与.xaml.cs 的关系   今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...

  4. Zend Server的WebAPI焦点:异步操作

    Zend Server作为Web应用服务器,在使用时,涉及连接的基本步骤,其中包括许多可用的WebAPI行为. WebAPI提供一些需要时间才能完成的操作,包括很复杂的或依靠外部实体(如远程服务器)才 ...

  5. jQuery.form Ajax无刷新上传错误 (jQuery.handleError is not a function) 解决方案

    今天,随着ajaxfileupload时间firebug财报显示,"jQuery.handleError is not a function"错误.因为一旦使用jQuery.for ...

  6. ubuntu下的词典的安装

    因为从事开发,安装一个词典是很有必要,文中介绍安装openyoudao和stardic两个软件的方法 一.openyoudao的安装 因为是由window转来学ubuntu的,所以总是想安装和wind ...

  7. VMWare 11安装操作系统 - 初学者系列 - 学习者系列文章

    在2010年的时候,我写过一篇关于VMWare的安装操作系统的博文.但是今天在QQ群里有人问起VMWare安装操作系统的问题,虽然回答了,但是回头看了下当时那篇博文,决定重新写一文. 首先要获取VMW ...

  8. sql2005还原超长sql脚本,还原超大脚本文件

    原文:sql2005还原超长sql脚本,还原超大脚本文件 从外网把数据库用导出脚本的方式导出来了,280M的样子,导是导出来了,但是在本机执行sql脚本的时候,直接就是out of memory,之前 ...

  9. javascript立即调用的函数表达式N种写法(第二篇)

    原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...

  10. Linux 下 Vi 配置文件 .vimrc 文件

    Linux 下 Vi 配置文件 .vimrc 文件 配置 vim 的方法是在用户主目录下建立个.vimrc文件,我一般使用root帐户,所以就在/root/下建立一个.vimrc文件:vi /root ...