在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 相关文章推荐
基于jquery的loading 加载提示效果实现代码
Sep 01 Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 Javascript
jQuery实现div浮动层跟随页面滚动效果
Feb 11 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
Apr 04 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
原生js实现可爱糖果数字时间特效
Dec 30 Javascript
JavaScript字符串对象
Jan 14 Javascript
vue mint-ui学习笔记之picker的使用
Oct 11 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
基于JS实现table导出Excel并保留样式
May 19 Javascript
JavaScript逻辑运算符相关总结
Sep 04 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和MySQL保存和输出图片
2006/10/09 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
js实现简单计算器
2015/11/22 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
用Python写一个无界面的2048小游戏
2016/05/24 Python
python读取LMDB中图像的方法
2018/07/02 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
GWebs公司笔试题
2012/05/04 面试题
市场营销专业推荐信
2013/11/03 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
python之基数排序的实现
2021/07/26 Python
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android