在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 文件大小判断的实现代码
Apr 07 Javascript
JS原型对象通俗"唱法"
Dec 27 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
JavaScript中windows.open()、windows.close()方法详解
Jul 28 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 Javascript
vuejs点击class变化的实例
Sep 05 Javascript
AJAX在JQuery中的应用详解
Jan 30 jQuery
基于vue实现一个禅道主页拖拽效果
May 27 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
javascript实现简易计算器功能
Sep 23 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
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php按单词截取字符串的方法
2015/04/07 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
js函数般调用正则
2008/04/08 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
金智子午JAVA面试题
2015/09/04 面试题
介绍一下sql server的安全性
2014/08/10 面试题
实习老师个人总结的自我评价
2013/09/28 职场文书
网络维护管理员的自我评价分享
2013/11/11 职场文书
活动总结报告范文
2014/05/04 职场文书
2014年派出所工作总结
2014/11/21 职场文书
优秀新员工事迹材料
2019/05/13 职场文书