在Mac OS上安装使用Node.js的项目自动化构建工具Gulp


Posted in Javascript onJune 18, 2016

安装 node.js
首先需要安装 node.js, 通常情况下,只需要到 Node.js 官网下载安装包安装就可以了。不过我可耻的失败了,弹出了如下错误:

在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

于是我换成了 brew 大法:

brew install nodejs

安装 Gulp

gulp 使用 Node.js 的 npm 命令安装:

npm install --global gulp

然后在项目目录中还要安装一遍:

npm install --save-dev gulp

我对这步的操作比较费解。以我多年码农经验,即然全局安装过了,应该就可以在作何地方使用了。但 gulp 显然不是这样。如果不在项目目录中执行这一步,使用 gulp 命令时会提示以下错误:

… Local gulp not found in …

… Try running: npm install gulp

最后在项目目录中执行一下 gulp 命令,如果输出以下内容,那就表示安装好了:

… No gulpfile found

简单例子

下面展示使用 Gulp 构建一个静态网站开发服务端,并且支持实时刷新(livereload)功能。

首先需要安装 livereload 的浏览器插件,插件地址:http://livereload.com/extensions/,支持 Chrome, Firefox, Safari 三大浏览器。插件安装后,会在浏览器上出现一个按钮,这个按钮有两个状态,实心圆点表示插件已启用,空心圆点表示插件未启用。切记切记!

然后创建一个简单的项目结构:

./gulpfile.js
./public/
./public/index.html

使用以下命令安装 gulp 和相关的组件:

npm install --save-dev gulp gulp-connect

gulp-connect 是 gulp 插件,提供了静态 web 服务端功能,并整合了 livereload 功能。

接下来需要编辑 gulpfile.js 文件,内容如下:

var gulp = require('gulp'),
    connect = require('gulp-connect')

  gulp.task('server', function() {
    connect.server({
      root: 'public',
      livereload: true
    })
  })

  gulp.task('html', function() {
    gulp.src('./public/*.html').pipe(connect.reload())
  })

  gulp.task('watch', function() {
    gulp.watch(['./public/*.html'], ['html'])
  })

  gulp.task('default', ['watch', 'server'])

最后运行这个 web 服务器:

gulp
打开浏览器,访问 http://localhost:4000。然后尝试修改 index.html 文件的内容后保存,正常情况下,浏览器端应该会自动刷新并显示修改后的内容。

Gulp与Grunt简单对比
让我们来看个范例,分别在Gulp及Grunt建构Sass:

Grunt:

sass: { 
 dist: {
  options: {
   style: 'expanded'
  },
  files: {
   'dist/assets/css/main.css': 'src/styles/main.scss',
  }
 }
},

autoprefixer: { 
 dist: {
  options: {
   browsers: [
    'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'
   ]
  },
  src: 'dist/assets/css/main.css',
  dest: 'dist/assets/css/main.css'
 }
},

grunt.registerTask('styles', ['sass', 'autoprefixer']);

Grunt需要各别配置外挂,指定其来源与目的路径。例如,我们将一个档案作为外挂Sass的输入,并储存输出结果。在设置Autoprefixer时,需要将Sass的输出结果作为输入,产生出一个新档案。来看看在Gulp中同样的配置:

Gulp:

gulp.task('sass', function() { 
 return gulp.src('src/styles/main.scss')
  .pipe(sass({ style: 'compressed' }))
  .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
  .pipe(gulp.dest('dist/assets/css'))
});

在Gulp中我们只需要输入一个档案即可。经过外挂Sass处理,再传到外挂Autoprefixer,最终取得一个档案。这样的流程加快建构过程,省去读取及写出不必要的档案,只需要最终的一个档案。

Javascript 相关文章推荐
用javascript关闭本窗口技巧小结
Sep 05 Javascript
javascript实现playfair和hill密码算法
Dec 07 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
jQuery中的Deferred和promise 的区别
Apr 03 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
JS填写银行卡号每隔4位数字加一个空格
Dec 19 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
element-ui表格合并span-method的实现方法
May 21 Javascript
jQuery 动画与停止动画效果实例详解
May 19 jQuery
vue组件开发之slider组件使用详解
Aug 21 Javascript
Javascript中prototype的使用详解
Jun 18 #Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 #Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 #Javascript
JavaScript的this关键字的理解
Jun 18 #Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 #Javascript
jQuery UI Bootstrap是什么?
Jun 17 #Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 #Javascript
You might like
PHP的一个基础知识 表单提交
2011/07/04 PHP
php简单生成随机数的方法
2015/07/30 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
vue实现评论列表功能
2019/10/25 Javascript
Python参数类型以及常见的坑详解
2019/07/08 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
使用Python pip怎么升级pip
2020/08/11 Python
详解python with 上下文管理器
2020/09/02 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
测量工程专业求职信
2014/02/24 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
经理岗位职责范本
2015/04/15 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
Python函数中的不定长参数相关知识总结
2021/06/24 Python
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android