在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 keyUp和keyDown的区别
Dec 12 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
js本地图片预览实现代码
Oct 09 Javascript
Javascript中this绑定的3种方法与比较
Oct 13 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
node.js博客项目开发手记
Mar 16 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
Oct 09 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 30 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版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
详解Python的Django框架中的通用视图
2015/05/04 Python
详解Python发送邮件实例
2016/01/10 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
Python中的面向接口编程示例详解
2021/01/17 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
自荐信的五个重要部分
2013/10/29 职场文书
企业厂长岗位职责
2013/12/17 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
倡议书作文
2015/01/19 职场文书
房屋维修申请报告
2015/05/18 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python