在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选择器的工作原理和优化分析
Jul 25 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
iview实现select tree树形下拉框的示例代码
Dec 21 Javascript
Vue组件的使用及个人理解与介绍
Feb 09 Javascript
vue中img src 动态加载本地json的图片路径写法
Apr 25 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
Oct 23 Javascript
node.js基础知识汇总
Aug 25 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/08 日漫
PHP验证码函数代码(简单实用)
2013/09/29 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
2018/10/09 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
python进行文件对比的方法
2018/12/24 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
Django返回HTML文件的实现方法
2020/09/17 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
优秀会计求职信
2014/07/04 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
公司车队管理制度
2015/08/04 职场文书
Python基础详解之描述符
2021/04/28 Python