在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下的keyCode键码值表
Apr 10 Javascript
JavaScript对IE操作的经典代码(推荐)
Mar 10 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
JavaScript新增样式规则(推荐)
Jul 19 Javascript
Angular2 多级注入器详解及实例
Oct 30 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
jQuery响应滚动条事件功能示例
Oct 14 jQuery
javascript实现文本框标签验证的实例代码
Oct 14 Javascript
ES6基础之数组和对象的拓展实例详解
Aug 22 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
PHP连接access数据库
2008/03/27 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
js函数在frame中的相互调用详解
2014/03/03 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
python实现中文输出的两种方法
2015/05/09 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python如何保存文本文件
2020/06/07 Python
Python grpc超时机制代码示例
2020/09/14 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
教学实习自我评价
2014/01/28 职场文书
超市开店计划书
2014/04/26 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
领导干部学习心得体会
2016/01/23 职场文书