在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中Math对象使用说明
Jan 16 Javascript
深入理解JavaScript系列(15) 函数(Functions)
Apr 12 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
JavaScript实现列表分页功能特效
May 15 Javascript
node.js+express制作网页计算器
Jan 17 Javascript
Mongoose实现虚拟字段查询的方法详解
Aug 15 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
webpack 4.0.0-beta.0版本新特性介绍
Feb 10 Javascript
Vue自定义toast组件的实例代码
Aug 15 Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 Javascript
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 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
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Python subprocess模块详细解读
2018/01/29 Python
Python实现Dijkstra算法
2018/10/17 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python版中国省市经纬度
2020/02/11 Python
Python库安装速度过慢解决方案
2020/07/14 Python
Java的for语句中break, continue和return的区别
2013/12/19 面试题
后进生转化工作制度
2014/01/17 职场文书
广告语设计及教案
2014/03/21 职场文书
文明班级建设方案
2014/05/15 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
python之django路由和视图案例教程
2021/07/26 Python
golang定时器
2022/04/14 Golang