在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 相关文章推荐
js 限制input只能输入数字、字母和汉字等等
Dec 18 Javascript
jquery实现带二级菜单的导航示例
Apr 28 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
JS实现光滑展开合拢的菜单效果代码
Sep 16 Javascript
jquery ui dialog替代confirm实例分析
Jan 25 Javascript
JS中关于事件处理函数名后面是否带括号的问题
Nov 16 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 Javascript
小程序双头slider选择器的实现示例
Mar 31 Javascript
通过vue刷新左侧菜单栏操作
Aug 06 Javascript
axios封装与传参示例详解
Oct 18 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 字符转义 注意事项
2009/05/27 PHP
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python如何实现单链表的反转
2020/02/10 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
团队精神演讲稿
2013/12/31 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
护士求职信范文
2014/05/24 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
实习单位证明范例
2014/11/17 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
CSS基础详解
2021/10/16 HTML / CSS
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
Python基础 括号()[]{}的详解
2021/11/07 Python