1.从github上拉下来的gulp文件,只要里面的package.json的依赖有的话,只需用命令进入目录,输入cnpm install ,安装完全部插件后,该文件会多了一个"node_moules"文件夹,在connect.server配置好port后能够直接命令"gulp" ,运行全部任务,命令会显示:localhost:port ,就能够直接在浏览器输入:localhost:8088等等访问项目。javascript
2.没有gulp,直接进入命令"cnpm init" ,而后输入文件描述等等,文件夹生成package.json。然后命令“npm install gulp-connect --save-dev
” 等本项目安装指定插件依赖。再新建gulpfile.js配置自动化任务就可。php
构建工具 Gulp.js 最近正在变得愈来愈流行。咱们能够用它作不少事,好比合并 JavaScript 文件或者压缩图片。css
本文将向你介绍如何使用 Gulp.js 来做为本地 Web 服务器,并且内置了 livereload 支持。html
假设咱们须要开发一个单页的 web 应用。应用入口很简单,就是 index.html 文件。咱们的目的是经过浏览器,以及 localhost 域名访问这个文件(某些状况下,经过 file:// 协议访问不能知足需求)。在此以前,或许你会在本机安装一个 Apache 或者 Nginx 服务器。若是只是为了经过 HTTP 协议访问一些静态文件,如今以上这些都不必了。java
如今,由 Javascript 来实现的解决方案几乎无处不在,甚至是做为 web 服务器(都要感谢 Node.js啊)。最流行的是一个叫作 Connect 的开源组件。咱们将经过 Gulp.js 的一个插件 gulp-connect 来调用它(与 grunt-contrib-connect 同样,不过 Gulp.js 更容易)。node
在接下来的章节中,咱们要为咱们的单页应用配置一个本地 web 服务器,我假设你已经有了其它基础配置,好比 gulpfile.js 文件。nginx
首先,用下面的命令来安装 Connect 插件:git
|
提示:npm install --save-dev
能够简化为 npm i -D
.web
接下来,为 web 服务器定义一个任务。gulpfile.js 文件中的代码相似下面这样:
1 2 3 4 5 6 7 8 |
|
这样就定义好了,只要在终端/命令行中执行 gulp
, 就能够启动 web 服务器。而后能够在浏览器中打开localhost:8080, 就能看到 index.html 的内容。这个简单的 web 服务器以当前 gulpfile.js 文件所在的文件夹做为网站根目录。服务器将一直运行,监听 localhost:8080, 要中止服务器,能够回到终端/命令行下按 Ctrl + C。(用过 Node.js, Grunt 或者 PHP 内置服务器的话,你必定对此很是熟悉。)
这个示例,以及接下来的全部示例的源代码能够在Github下载。每一个例子的代码在一个单独的文件夹下,你须要在对应的文件夹下执行 npm install
命令来安装依赖项。
设置基本的 web 服务器很是简单,接下来咱们要继续完善它,首先要实现实时刷新。须要作两件事:
第一步很简单,只要给 connect.server()
方法传入一个参数便可:
1 2 3 4 5 |
|
第二步取决于你的项目的状况。在这个示例中(从 Github 下载示例代码,本例使用 02-livereload ),咱们须要 Gulp.js 自动把 LESS 文件编译成 CSS 样式,并将其注入到浏览器。
先来分解一下这个例子:咱们须要一个“监控器( watcher )”,它负责检查 LESS 文件是否发生变化。若是发生变化,它会通知 LESS 编译器把 LESS 文件编译为 CSS 文件,而后新的 CSS 文件经过实时刷新注入到页面。
为了编译 LESS 文件,须要用到 gulp-less 插件。你能够经过运行 npm i -D gulp-less
来安装 gulp-less 并在 gulpfile.js 文件中添加这个依赖项。watcher 不用额外插件, Gulp.js 已经自带了。
咱们的文件结构如如下所示:
|
在 watch 任务中,Gulp.js 监听 styles 目录下全部的 *.less 文件,一旦它们发生变化,就触发 less 任务。本例中, main.less 是 LESS 的入口文件。每次编译完成后,结果会自动注入到浏览器。 gulpfile.js的内容相似下面的实例,你能够复制粘贴到你的项目中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
保存以后,回到终端/命令行,Ctrl+C 中止服务器(若是它还处于运行状态),而后再次执行 gulp
启动服务器。打开浏览器,打开 localhost:8080. 如今咱们能够去 style 目录下的 LESS 文件作一点修改,并保存。你会看到 LESS 的修改被实时编译并自动同步生效到浏览器中的页面上。特别要说明的是,你不须要任何浏览器插件或者扩展。
请记住:前面的 gulpfile.js 只是一个为了演示如何使用 gulp.js 做为带有实时刷新支持的 web 服务器的精简示例。在实际项目中,建议配合其它的一些插件一块儿使用。你能够尝试着从新排列任务的顺序,或者尝试一下非内置的 gulp-watch 插件,这个插件可让你只处理发生变化的文件。若是你的项目有大量的代码/文件,这个功能很是有用。在接下来的例子中,我会再演示另外的一种任务结构。
gulp-connect 插件支持不少配置选项,前面咱们只用到了 livereload 这一个。若是你须要修改 web 服务器监听的端口或者主机名,好比想经过 http://gulp.dev 来访问,你能够这样作:
1 2 3 4 |
|
为了可以经过 gulp.dev 域名以及默认的 80 端口来启动和访问,你须要:
你还能够继续深刻探索 connect 插件的其它用法,好比同时启动多个 web 服务器。有时候这很必要,好比你须要运行一个开发服务器,同时执行集成测试等。
gulp-connect 也提供了一些额外的特性,好比用多个文件夹做为单个服务器的根目录。例如,你使用 CoffeeScript, 但愿把编译的 Javascript 文件暂存在某个临时目录中,你能够把本来的项目根目录与该临时文件夹同时做为网站根目录。具体的实例能够在这里找到。
在前面的示例中,咱们配置了一个“小巧玲珑”的 gulpfile.js 来完成把 LESS 文件编译成 CSS 而且自动注入浏览器的任务。它能用,可是还能够优化。因为咱们把编译和实时刷新两个任务混合成了一个,有可能会致使问题。因此,接下来咱们要把它们拆成单独的任务,而后只监控生成后的文件。为了达到这个目的,就须要用到刚才提到的 gulp-watch 插件。
既然要重构,那就再多作一点,咱们顺便把 CoffeeScript 编译也添加进去。这样,新的目录结构会更加整洁。首先经过 npm 来安装须要的新插件:
|
而后在 gruntfile.js 中加载。接下来的步骤,我假设你已经在 scripts 目录下建立了一些 .coffee 文件。这个示例的源文件在前面已经提到过的这个 github repo 中的 03-livereload-refactored 文件夹中。重构以后的 gruntfile.js 参见下面的代码,咱们随后要一步一步地讲解这些代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
最大的变化是加入了单独的 livereload 任务。这个任务只负责监控(经过 gulp-watch 插件)编译后的文件的变化,并在浏览器中刷新它们。gulp-watch 自定义的 watch()
函数让咱们能够只刷新变化的文件,而内置的 gulp.watch()
一般会刷新全部文件。
因为加入了一个额外的独立监控任务,编译步骤后面就再也不须要 .pipe(connect.reload())
命令。这样咱们就把任务根据它们的不一样职能进行了划分,这是软件开发中通过实践验证的设计模式。
此外还应该注意到,编译后的文件再也不保存在它们各自原先的源文件夹中,而是存储在 .tmp 临时文件夹中,这个文件夹的内容只有编译生成的文件,这样原来的样式和脚本文件夹就再也不被生成的文件污染。这个文件夹还应该被排除在版本管理系统以外,好比 svn-ignore 属性和 .gitignore 文件。可是为了在开发过程当中可以进行测试,须要把 .tmp 也做为网站根目录,在 webserver 任务中,完成这个工做的任务是下面这行代码:
|
通过重构以后,完成的工做虽然没有什么不一样,可是相比以前,就变得更加清晰明了,并且便于扩展。
经过本文,你了解了如何 使用 Gulp.js 来做为 web 服务器。
你能够把这个与其它技术一块儿使用,好比测试,或者建立单页应用程序。须要提醒的是,这个 web 服务器只适合做为本机开发用途。生产环境你仍是须要使用性能更好,更可靠的解决方案,好比 Nginx 或者 CDN.