在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 UI 1.72 之datepicker
Dec 29 Javascript
非常棒的10款jQuery 幻灯片插件
Jun 14 Javascript
浅析Node在构建超媒体API中的作用
Jul 30 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
Mar 02 Javascript
jQuery子元素过滤选择器用法示例
Sep 09 Javascript
js实现抽奖效果
Mar 27 Javascript
ES6新数据结构Map功能与用法示例
Mar 31 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
Oct 31 Javascript
JavaScript 判断iPhone X Series机型的方法
Jan 28 Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
Nov 05 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
Python selenium 三种等待方式解读
2016/09/15 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
python第三方库学习笔记
2020/02/07 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
南京某公司笔试题
2013/01/27 面试题
水电工岗位职责
2014/02/12 职场文书
三字经教学反思
2014/04/26 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
公司开除员工通知
2015/04/22 职场文书
七年级语文教学反思
2016/03/03 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python