在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 相关文章推荐
DOM精简教程
Oct 03 Javascript
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
Mar 12 Javascript
javascript preload&lazy load
May 13 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
js处理json以及字符串的比较等常用操作
Sep 08 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
Jun 13 Javascript
vue-router单页面路由
Jun 17 Javascript
浅谈React前后端同构防止重复渲染
Jan 05 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
基于javascript实现碰撞检测
Mar 12 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Python3数字求和的实例
2019/02/19 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
计算机专业职业生涯规划范文
2014/01/19 职场文书
法律七进实施方案
2014/03/15 职场文书
七一建党节演讲稿
2014/09/11 职场文书
2016年元旦主持词
2015/07/06 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
日元符号 ¥
2022/02/17 杂记