在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 相关文章推荐
URI、URL和URN之间的区别与联系
Dec 20 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 20 Javascript
Jquery结合HTML5实现文件上传
Jun 25 Javascript
Javascript编程中几种继承方式比较分析
Nov 28 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
CentOS 8.2服务器上安装最新版Node.js的方法
Dec 16 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实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Python中static相关知识小结
2018/01/02 Python
python对excel文档去重及求和的实例
2018/04/18 Python
pandas中去除指定字符的实例
2018/05/18 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
优秀管理者事迹材料
2014/05/22 职场文书
演讲稿开场白台词
2014/08/25 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
单位综合评价意见
2015/06/05 职场文书
交通安全主题班会
2015/08/12 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL