基于Node.js的JavaScript项目构建工具gulp的使用方法

这篇文章主要介绍了关于基于node.js的javascript项目构建工具gulp的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

也许你使用过grunt,那么这里来安利gulp的话就更加不会陌生了,下面我们就来看一下基于Node.js的JavaScript项目构建工具gulp的使用教程

npm install gulp --save-dev

登录后复制

什么是gulp?
gulp是新一代的前端项目构建工具,你可以使用gulp及其插件对你的项目代码(less,sass)进行编译,还可以压缩你的js和css代码,甚至压缩你的图片,gulp仅有少量的API,所以非常容易学习。 gulp 使用 stream 方式处理内容。Node催生了一批自动化工具,像Bower,Yeoman,Grunt等。

gulp和grunt的异同点
易于使用:采用代码优于配置策略,Gulp让简单的事情继续简单,复杂的任务变得可管理。
高效:通过利用Node.js强大的流,不需要往磁盘写中间文件,可以更快地完成构建。
高质量:Gulp严格的插件指导方针,确保插件简单并且按你期望的方式工作。
易于学习:通过把API降到最少,你能在很短的时间内学会Gulp。构建工作就像你设想的一样:是一系列流管道。
因为gulp是用node.js写的,所以你需要在你的终端上安装好npm。npm是node.js的包管理器,所以先在你的机子上安装好node.js吧。

gulp安装命令

立即学习“Java免费学习笔记(深入)”;

sudo npm install -g gulp

登录后复制

在根目录下新建package.json文件

npm init .

登录后复制

安装gulp包

安装好后再次输入gulp -v查看版本号,如下图显示则为成功:

2016520182145165.jpg (570×166)

安装插件
安装常用插件:

sass的编译                  (gulp-ruby-sass)
自动添加css前缀              (gulp-autoprefixer)
压缩css                    (gulp-minify-css)
js代码校验                  (gulp-jshint)
合并js文件                  (gulp-concat)
压缩js代码                  (gulp-uglify)
压缩图片                    (gulp-imagemin)
自动刷新页面                 (gulp-livereload)
图片缓存,只有图片替换了才压缩  (gulp-cache)
更改提醒                    (gulp-notify)
清除文件                    (del)
安装这些插件需要运行如下命令:

$ npm install gulp-ruby-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev-save和-save-dev可以省掉你手动修改package.json文件的步骤。

登录后复制

npm install module-name -save

登录后复制

 自动把模块和版本号添加到dependencies部分

npm install module-name -save-dev

登录后复制

自动把模块和版本号添加到devdependencies部分
gulp命令
你仅仅需要知道的5个gulp命令

gulp.task(name[, deps], fn) 定义任务  name:任务名称 deps:依赖任务名称 fn:回调函数

gulp.run(tasks…):尽可能多的并行运行多个task

gulp.watch(glob, fn):当glob内容发生改变时,执行fn

gulp.src(glob):置需要处理的文件的路径,可以是多个文件以数组的形式,也可以是正则

gulp.dest(path[, options]):设置生成文件的路径
glob:可以是一个直接的文件路径。他的含义是模式匹配。
gulp将要处理的文件通过管道(pipe())API导向相关插件。通过插件执行文件的处理任务。

gulp.task('default', function () {...});

登录后复制

gulp.task这个API用来创建任务,在命令行下可以输入$ gulp [default],(中括号表示可选)来执行上面的任务。

gulp官方API文档:https://github.com/gulpjs/gulp/blob/master/docs/API.md

gulp 插件大全:http://gulpjs.com/plugins/
开始构建项目
在项目根目录下新建一个gulpfile.js文件,粘贴如下代码:

//在项目根目录引入gulp和uglify插件var gulp = require('gulp');var uglify = require('gulp-uglify');gulp.task('compress',function(){  return gulp.src('script/*.js')  .pipe(uglify())  .pipe(gulp.dest('dist'));});

登录后复制

注:gulpfile.js文件名不可更改。
项目需要用到uglify和rename插件,执行以下命令安装:

npm install --save-dev gulp-uglifynpm install --save-dev gulp-rename

登录后复制

以我的为例,进入gulpfile.js所在目录:

cd /Users/trigkit4/gulp-test

登录后复制

然后输入:

var gulp = require('gulp');var uglify = require('gulp-uglify');var rename = require('gulp-rename');gulp.task('compress',function(){  return gulp.src('script/*.js')  .pipe(uglify())  .pipe(rename('jquery.ui.min.js'))  .pipe(gulp.dest('dist'));});

登录后复制

该命令会安装package.json下的全部依赖,如下图所示:

2016520182629058.jpg (800×319)

完整的gulpfile.js

// 载入外挂var gulp = require('gulp'),   sass = require('gulp-ruby-sass'),  autoprefixer = require('gulp-autoprefixer'),  minifycss = require('gulp-minify-css'),  jshint = require('gulp-jshint'),  uglify = require('gulp-uglify'),  imagemin = require('gulp-imagemin'),  rename = require('gulp-rename'),  clean = require('gulp-clean'),  concat = require('gulp-concat'),  notify = require('gulp-notify'),  cache = require('gulp-cache'),  livereload = require('gulp-livereload'); // 样式gulp.task('styles', function() {  return gulp.src('src/styles/main.scss')  .pipe(sass({ style: 'expanded', }))  .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))  .pipe(gulp.dest('dist/styles'))  .pipe(rename({ suffix: '.min' }))  .pipe(minifycss())  .pipe(gulp.dest('dist/styles'))  .pipe(notify({ message: 'Styles task complete' }));}); // 脚本gulp.task('scripts', function() {  return gulp.src('src/scripts/**/*.js')  .pipe(jshint('.jshintrc'))  .pipe(jshint.reporter('default'))  .pipe(concat('main.js'))  .pipe(gulp.dest('dist/scripts'))  .pipe(rename({ suffix: '.min' }))  .pipe(uglify())  .pipe(gulp.dest('dist/scripts'))  .pipe(notify({ message: 'Scripts task complete' }));}); // 图片gulp.task('images', function() {  return gulp.src('src/images/**/*')  .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))  .pipe(gulp.dest('dist/images'))  .pipe(notify({ message: 'Images task complete' }));}); // 清理gulp.task('clean', function() {  return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {read: false})  .pipe(clean());}); // 预设任务gulp.task('default', ['clean'], function() {   gulp.start('styles', 'scripts', 'images');}); // 看守gulp.task('watch', function() {  // 看守所有.scss档 gulp.watch('src/styles/**/*.scss', ['styles']);  // 看守所有.js档 gulp.watch('src/scripts/**/*.js', ['scripts']);  // 看守所有图片档 gulp.watch('src/images/**/*', ['images']);  // 建立即时重整伺服器 var server = livereload();  // 看守所有位在 dist/ 目录下的档案,一旦有更动,便进行重整 gulp.watch(['dist/**']).on('change', function(file) {  server.changed(file.path); }); });

登录后复制

注:pipe()是stream模块里传递数据流的一个方法,第一个参数为插件方法,插件会接收从上游流下的文件,进行处理加工后,再往下流。

gulp.task('任务名称', function () {  return gulp.src('文件路径')    .pipe(...)    .pipe(...)    // 直到任务的最后一步    .pipe(...);});

登录后复制

gulp插件
gulp-gh-pages:使用gulp来把markdown生成html文档并上传到git pages上
https://github.com/shinnn/gulp-gh-pages

var gulp = require('gulp');var ghPages = require('gulp-gh-pages');gulp.task('deploy', function() { return gulp.src('./dist/**/*')  .pipe(ghPages());});

登录后复制

gulp-jade插件:将jade编译成html文件
gulp-less插件:将less编译成css文件

var less = require('gulp-less');var path = require('path'); gulp.task('less', function () { return gulp.src('./less/**/*.less')  .pipe(less({   paths: [ path.join(__dirname, 'less', 'includes') ]  }))  .pipe(gulp.dest('./public/css'));});gulp-live-server 插件:方便的,轻量级的服务器var gulp = require('gulp'); var gls = require('gulp-live-server'); gulp.task('serve', function() { //1. serve with default settings var server = gls.static(); //equals to gls.static('public', 3000); server.start(); //2. serve at custom port var server = gls.static('dist', 8888); server.start(); //3. serve multi folders var server = gls.static(['dist', '.tmp']); server.start(); //use gulp.watch to trigger server actions(notify, start or stop) gulp.watch(['static/**/*.css', 'static/**/*.html'], function (file) {  server.notify.apply(server, [file]); });});

登录后复制

gulp-livereload,可以实时保存刷新,那样就不用按F5和切换界面了
gulp-load-plugins:在你的package.json文件中自动加载任意的gulp插件

$ npm install --save-dev gulp-load-plugins

登录后复制

例如一个给定的package.json文件如下:

{  "dependencies": {    "gulp-jshint": "*",    "gulp-concat": "*"  }}

登录后复制

在gulpfile.js中添加如下代码:

var gulp = require('gulp');var gulpLoadPlugins = require('gulp-load-plugins');var plugins = gulpLoadPlugins();plugins.jshint = require('gulp-jshint');plugins.concat = require('gulp-concat');

登录后复制

gulp-babel:gulp 的babel插件,

$ npm install --save-dev gulp-babel babel-preset-es2015

登录后复制

使用方法:

const gulp = require('gulp');const babel = require('gulp-babel');gulp.task('default', () => {  return gulp.src('src/app.js')    .pipe(babel({      presets: ['es2015']    }))    .pipe(gulp.dest('dist'));});

登录后复制

官方github: https://github.com/gulpjs/gulp

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Node.js中如何合并两个复杂对象的介绍

关于Node.js 子进程与应用的介绍

Webpack优化配置缩小文件搜索范围的介绍

以上就是基于Node.js的JavaScript项目构建工具gulp的使用方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2594794.html

(0)
上一篇 2025年3月6日 17:39:32
下一篇 2025年2月22日 16:39:28

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript模块规范的CommonJS、AMD和CMD的介绍

    本篇文章给大家带来的内容是关于javascript模块规范的commonjs、amd和cmd的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本篇文章来自对文章《js模块化编程之彻底弄懂CommonJS和AMD/CMD…

    编程技术 2025年3月6日
    200
  • JavaScript中7个处理undefined的小技巧

    当原作者开始学习JS时,遇到了一个奇怪的情况,既存在undefined 的值,也存在表示空值的null。它们之间的明显区别是什么?它们似乎都定义了空值,而且,比较null == undefined的计算结果为true。 大多数现代语言,如R…

    2025年3月6日 编程技术
    200
  • vue.js就是node吗

    vue.js不是node;两者是完全不同的。vue.js是一款JavaScript前端框架,一个用于创建用户界面的开源JS框架;而Node是一个基于Chrome V8引擎的JavaScript运行环境,一个让JS运行在服务端的开发平台。 本…

    2025年3月6日
    200
  • 编写javascript程序的唯一工具是纯文本编辑器吗?

    错。编写javascript程序的开发工具有很多,例如:Webstorm、Atom、Visual Studio Code、Brackets、sublime text、Notepad++、JS Nice、HBuilder、Eclipse等等。…

    2025年3月6日
    200
  • 卸载node的命令

    卸载node的命令是“remove”和“rm -rf”,其具体卸载node的方法是:首先使用“sudo apt-get remove nodejs npm”命令删除一次node;然后通过“rm -rf”命令删除文件即可。 本文操作环境:wi…

    2025年3月6日
    200
  • nodejs与javascript的区别

    nodejs与javascript的区别是:1、原生js运行文件依赖于浏览器;2、nodejs运行文件的时候服务为终端;3、原生js有兼容性问题,而nodejs不存在兼容性问题;4、nodejs可以进行本地的读写,而原生js无法做到。 本文…

    2025年3月6日
    200
  • javascript创建对象三种方法是什么

    方法是:1、使用内置对象,JavaScript语言原生对象或运行期的宿主对象;2、使用JSON符号,采用简单的“键/值对”的集合或是有序的值列表;3、自定义对象构造,使用“this”关键字或使用原型prototype进行构造。 本教程操作环…

    2025年3月6日
    200
  • JavaScript单元测试有什么用

    在JavaScript中,单元测试是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作,其目标是隔离程序模块并证明这些单个模块是正确的。单元测试能确保在开发过程的早期就发现问题,可以使程序员方便地检查代码片断是否依然正常工作。 本…

    2025年3月6日
    200
  • 写javascript用什么软件

    写javascript可用的软件:1、Webstorm;2、Sublime Text;3、Atom;4、Visual Studio Code;5、Notepad++;6、Eclipse;7、HBuilder;8、Kineticwing等。 …

    2025年3月6日
    200
  • javascript有IDE吗

    javascript中有IDE,例如Visual Studio Code、Atom、WebStorm、IntelliJ IDEA、Brackets、Microsoft Visual Studio、Komodo等等。 本教程操作环境:wind…

    2025年3月6日 编程技术
    200

发表回复

登录后才能评论