在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对象是否可用的最正确方法分析
Oct 03 Javascript
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
理解javascript模块化
Mar 28 Javascript
fullpage.js全屏滚动插件使用实例
Sep 06 Javascript
JSONP基础知识详解
Mar 19 Javascript
JavaScript瀑布流布局实现代码
May 06 Javascript
js链表操作(实例讲解)
Aug 29 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
详解vue+webpack+express中间件接口使用
Jul 17 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加密解密函数(动态加密)
2013/06/19 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python标准库之Sys模块使用详解
2015/05/23 Python
Python实现选择排序
2017/06/04 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python实现AES加密和解密
2019/03/27 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
UNIX文件系统常用命令
2012/05/25 面试题
购房协议书
2014/04/11 职场文书
法务专员岗位职责
2015/02/14 职场文书
总经理岗位职责范本
2015/04/01 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
如何用Python搭建gRPC服务
2021/06/30 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android