Gulp学习和使用
gulp是前端自动化工具,和grunt比较类似,但据说比较简单,和webpack也比较像,但我觉得两着在侧重点上不一样,gulp更加的全面,通过配置和插件,不仅可以完成webpack全部功能,而且可以完成webpack不能完成的功能,比如运行命令行.
安装gulp:
1 | cnpm install gulp -g或者npm install gulp -g |
1.使用gulp打包压缩完整项目
1.使用gulp-babel编译es6语法
安装npm install –save-dev gulp-babel babel-core babel-preset-env,添加babel代码:
1 | var gulp = require('gulp'); |
执行gulp scripts,竟然报错了,未找到@babel/core
原来是babel-core包变成了@babel/core包,重新安装npm install @babel/core –save-dev即可.这里还有个问题就是:
我在使用babel的时候配置了 babel({presets:[‘es2015’]}),而实际上我安装的是babel-preset-env这个插件,所以报错了,需要改成babel({presets:[‘env’]}),参考( 相关网站 )由此也可以得出babel-preset-env和babel-preset-es2015不一样.当然你也可以在根目录下,新建.babelrc文件,里面写如下代码,和在babel构造函数中直接写是一样的.
1 | { |
babel-preset-env和babel-preset-es2015的区别在这里: 相关网站 ,主要就是es2015已经过时了,env是新的,并且不过时的.
注意
gulp-babel只是一个转义,不能进行打包,对于在js文件中使用import进行导入的js,最好结合webpack-stream或者是browserify进行开发.
2.gulp忽略某些文件
在使用gulp-uglify压缩js代码时,总会遇到要排除某些文件的情况,比如引入的外部js代码库,在压缩的时候,就想将外部引入的js代码库忽略掉。这里我示例是压缩public下的所有js,但是排除public/lib文件夹下的全部js文件。
(1) 默认的gulp.src中可以通过“./public/*/.js”这种形式包含处理的文件,也可以使用在文件前面加一个!,排除不想处理的文件比如:“!./public/js/src/pagination.js”。gulp默认支持glob格式,排除语法为!。这种方式有点问题:
1 | //我想在打包./public目录下所有js文件,但是排除 ./public/lib/这个文件夹里的js,经过测试,使用!语法不能达到目的,即使我写'!./public/lib/pagination.js'、'!./public/js/src/*.js'都无法排除pagination.js被压缩的命运 |
(2) 后来我尝试使用了gulp-ignore这个插件,这个插件的作用主要是:“Include or exclude gulp files from the stream based on a condition”。用法也比较简单,首先安装:cnpm install gulp-ignore -D,然后使用,这个插件也是有同样的问题,exclude排除某个文件或文件夹,但还是不起作用,相反,我使用include,却可以包含进来要打包的文件,确实能通过uglify,而且这个插件还有一个缺点,“和默认情况一样,不支持被排除文件的拷贝。”
1 | var gulpIgnore = require('gulp-ignore'); |
(3) 上面的方式都解决不了,只能换一个插件试试gulp-filter。安装npm install –save-dev gulp-filter,使用如下:
1 | // 压缩 public/js 目录 js |
结果,依然不能如愿以偿,我尝试了’!./public/lib/pagination.js’等多种方式书写排除,都无法满足要求。
我都要放弃这无用的尝试了,我猜测是因为windows的path路径是以反斜杠分隔的,而linux的文件路径是以斜杠分隔的。(折腾了一天了,啥都没弄出来,暂时放弃吧。)
1.gulp排除已压缩文件思路
2.gulp-ignore
3.gulp排除文件的用法
4.gulp.src排除一些文件
5.gulp.src() 方法排除目录
6.gulp-filter
7.Gulp学习笔记
新进展
1 | //使用这种方式,可以只压缩public/lib目录下的js文件,而忽略public/js文件夹下的js文件 |
经过测试,filter好像是不能使用”!”这种语法的,也就是说’!*/lib/*/*.js’是不能排除public/lib下的js文件的,会报错:
最新进展
1 | // 卧槽,这样真的可以排除public/lib下的全部文件被压缩,我以前是怎么写的呢? |
gulp.src(‘./public/\/.js’,’!public/lib/*‘) 少了中括号啊!,中括号!,中括号!我都开始怀疑我的智商了。**
总结:
1.gulp.src可以通过添加!符号,排除某些文件,src第一个参数是数组,!不能是数组第一个。
1 | //可以排除public/lib下的所有文件被压缩 |
2.gulp-filter可以实现文件的过滤,过滤中不能加.的相对目录,不支持!语法。
1 | // 可以将stream缩小到pubic/lib文件夹,其他文件夹都不会被压缩 |