var gulp = require('gulp'); gulp.task('build', function () { return gulp .src('./sample.js') .pipe(gulp.dest('./build')); });
复制文件完成了,可是它没有压缩这个JS文件。要作到这一点,你必须使用一个Gulp插件。在这种状况下,你可使用gulp-uglify,流行的UglifyJS压缩编绎插件html
var gulp = require('gulp'); var uglify = require('gulp-uglify'); gulp.task('build', function () { return gulp .src('./sample.js') .pipe(uglify()) .pipe(gulp.dest('./build')); });
流使可让您添加更多的插件,而只须要读取和写入磁盘一次。你也能够指定缓冲器中内容的大小。须要注意的是,若是你在压缩以前添加它,那么你获得的大小是unminified。node
var gulp = require('gulp'); var uglify = require('gulp-uglify'); var size = require('gulp-size'); gulp.task('build', function () { return gulp .src('./sample.js') .pipe(uglify()) .pipe(size()) .pipe(gulp.dest('./build')); });
Gulp的核心API只有5个,掌握了5个API就学会了Gulp,以后即可以经过管道流组合本身想要的任务。git
gulp.task(name[, deps], fn)
:注册任务name
是任务名称;deps
是可选的数组,其中列出须要在本任务运行要执行的任务;fn
是任务体,这是 gulp.js 的核心了,须要花时间吃透它,详情见此。gulp.src(globs[, options])
:指明源文件路径globs
必定不会陌生,这里没什么变化;options
是可选的,具体请查看 gulp.js APIgulp.dest(path)
:指明任务处理后的目标输出路径gulp.watch(glob[, options], tasks)/gulp.watch(glob[, options, cb])
:监视文件的变化并运行相应的任务。你没看错,watch
做为核心 API 出如今 gulp.js 里了,具体用法仍是要多看文档,不过接下来咱们会演示简单的例子。var gulp = require('gulp'); var jshint = require('gulp-jshint'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename'); // 语法检查 gulp.task('jshint', function () { return gulp.src('src/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')); }); // 合并文件以后压缩代码 gulp.task('minify', function (){ return gulp.src('src/*.js') .pipe(concat('all.js')) .pipe(gulp.dest('dist')) .pipe(uglify()) .pipe(rename('all.min.js')) .pipe(gulp.dest('dist')); }); // 监视文件的变化 gulp.task('watch', function () { gulp.watch('src/*.js', ['jshint', 'minify']); }); // 注册缺省任务 gulp.task('default', ['jshint', 'minify', 'watch']);
loadNpmTasks
就能够用了。它能使程序员使用JavaScript构建编绎工具时,几乎不费吹灰之力。你只须要寻找合适的插件,阅读它们的文档,而后安装和配置它。有基础足够大的插件库,几乎不须要开发本身的编译任务。
1.使用 gulp.js,你的构建脚本是代码,而不是配置文件;程序员
2.使用标准库(node.js standard library)来编写脚本;github
3.插件都很简单,只负责完成一件事-基本上都是 20 行左右的函数;npm
4.任务都以最大的并发数来执行;gulp
5.输入/输出(I/O)是基于“流式”的。api