如果认真看了前面5篇系列文章;
那肯定会产生一个疑问;
难道写个页面需要敲这么多乱七八糟的命令行;
这也没怎么提升效率啊;
没错;所以;就有了自动化构建工具;
自动化构建工具中使用比较广泛的有两种;
grunt 和 gulp;
它们的作用就是用配置项文件的方式替代各式各样的命令行;
来完成测试、检查、合并、压缩、格式化、浏览器自动刷新等等;
在某个窗外满是雾霾的周末;
我是先研究了下grunt;
然后;我承认;
面对grunt黑压压一片的配置我怂了;
然后又看了下gulp的相关文章;
gulp大有取代grunt之势;
于是果断投入gulp的怀抱;
还记得之前文章的流程么?
第一步都是先安装包的;
每次都要讲需要安装哪些包;
那可不可以用一个文件配置需要安装的包呢?
必须是有的;这正是 package.json 的作用之一;
在讲 gulp 之前先插播一段关于 package.json 的科普;
首先使用 初始化命令填写一些基本信息;
比如说作者、版本号、描述等等;
如果全部一路回车按默认的话;
生成的是这个样子的;
然后在安装包的时候带上 --save-dev;
那么安装的包的名称和版本号就会自动写入到 package.json 中的;
可以同时安装多个包;举个栗子:
生成:
以后只需要复制这个 package.json 到需要写的项目的目录下;
运行:
即可逐个安装 devDependencies 中的包;
再也不用一个一个的 cnpm install ... 了;
想更详细的了解 package.json 可以看这篇文章:
npm package.json 属性详解
要使用gulp ;那首先还是要安装的;
老规矩;运行:
能显示版本表示安装成功;
还记得之前文章的流程么?
第二步都是运行包命令了;
既然安装的包可以记录在 package.json 文件中;
那运行的包的命令可不可以也记录在一个文件中呢?
答案是肯定的;
这个文件就叫做 gulpfile.js ;
ok;我们就来拿gulp 处理scss举例说明:
我们在 https://www.npmjs.com 上搜索 gulp sass;
我们直接就用第一个了;
手动创建 gulpfile.js 文件;
首先是 require 安装的包;比如说上面安装了 gulp 和 gulp-sass;
gulp. task() 是定义一条任务;
第一个参数是任务的名称;
第二个参数可以是一个闭包函数;
在闭包函数中处理定义的任务;
gulp.src()
中传需要处理的文件名的路径;
gulp.src('css/test.scss')
表示要处理css目录下的test.scss 文件
gulp.src('css/*.scss')
表示要处理css目录下的所有 scss 文件
gulp.src('**/*.scss')
表示要处理所有目录下的所有 scss 文件
gulp.src('**/*.+[scss|sass]')
表示要处理所有目录下的所有 scss 和 sass 文件
pipe()
跟linux中的管道是一个意思;
gulp.src('test.scss').pipe(sass())
的意思就是把test.scss文件交给sass编译;
gulp.dest()
传入输出的目录;
gulp.dest('css')
表示输出到 css 目录下;
gulp.src('**/*.+(scss|sass)').pipe(sass()).pipe(gulp.dest('css'));
串起来就是 把所有目录下的后缀为scss和sass文件都编译到css目录下;
如果说还想再压缩下css呢?
同理;先去搜索;然后install;接着require;pipe就行了;
这样运行gulp css即可编译压缩;
但是改动下css文件就运行下 gulp css 也挺烦的;
那接着来讲 watch 监听文件变化后自动处理;
gulp.watch()
第一个参数是文件路径;第二个参数是任务名数组;
gulp.watch('*.scss', ['css']);
监听所有的scss文件;然后调用名为css的任务去处理;
运行一次命令即可一直监听了;
但是;还想再懒点;只打个gulp行不行呢?
可以;定义个default命令即可;
gulp.task('default', ['css', 'server']) ;
当输入gulp的时候;
先执行 css 任务; 然后执行监听任务;
以后只需要简单的gulp就可以了;
还有js、自动刷新等功能就不一一举栗了;
直接把一份现成的分享出来;
package.json:
gulpfile.js:
下载下来后到 gulp 目录下先运行
等安装完成后; 运行:
这时候会自动打开浏览器访问 http://localhost:3000 ;
修改 demo/gulp/src/css/index.scss 中的背景色即可快速体验:
可以编译压缩scss;
可以编译压缩es6;
可以压缩图片;
可以压缩html;
可以自动刷新;
如果想自定义目录;
那直接改 gulpfile.js 文件中定义的src和dits变量即可;
终于在元旦假期的时候凑出来了点时间;
终于这个系列告一段落了;