在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的消息提示插件 DivAlert之旅(二)
Apr 01 Javascript
js jquery数组介绍
Jul 15 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
Jan 11 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
Sep 18 Javascript
js文件Cookie存取值示例代码
Feb 20 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
Sep 28 Javascript
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 Javascript
React key值的作用和使用详解
Aug 23 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
Sep 04 Javascript
实例详解带参数的 npm script
May 28 Javascript
详解如何在JS代码中消灭for循环
Dec 11 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 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
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
深入分析Cookie的安全性问题
2015/03/01 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python获取中文字符串长度的方法
2018/11/14 Python
python设置随机种子实例讲解
2019/09/12 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
大学自主招生自荐信
2013/12/16 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
文明寝室申报材料
2014/05/12 职场文书
找工作求职信
2014/07/07 职场文书
实习指导教师评语
2014/12/30 职场文书
音乐会主持人开场白
2015/05/28 职场文书
贫困证明书范文
2015/06/16 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers