nodejs实现简单的gulp打包
作者:等鹿的小喵喵 时间:2024-05-11 10:16:22
最近换了家新公司,由于是创业公司,项目基本从零开始搭建。工作几年,也没想过写点什么技术性的东西,今天突然心血来潮,哦当然,我这个人总是特别容易心血来潮,不定想干点啥,不说废话了,毕竟上班呢,开小差也不太好。忙了一个月,项目初见雏形,也基本可以1.0上线了,趁着等文案的时间,简单写点gulp打包的东西,等明儿有空再来一篇详细的,再有空再来个webpack的,哎呀,这个有空也不知道是啥时候,莫怪,好像又废话了几句。stop,stop。
从头儿来吧,首先创建一个package.json文件,就npm init一直确认确认确认就好了,构建过程中用到什么就npm什么就好了。做过vue脚手架的小伙伴儿应该知道,脚手架会自动生成一个特别全面的package.json文件,当然我们目前也用不到那么多。不多说了。
为了万一以后添加强大的功能,我们就多做几个文件,就不是仅仅一个gulpfile.js了,当然一个也没问题。
来创建一个gulpfile.config.js来专门放置文件路径引用输出等。就是所谓的src,dist。再来一个gulpfile.xxx.js,名字随便起吧,引用的时候引用对就好了。再来一个gulpfile.js吧,最后要运行啊。
做个最简单例子,以js压缩为例,稍后加上版本哈管理功能,用法都差不多,用什么加什么。
var src_file = './xxxx/'; // 你的源文件目录
var dist_file= './dist/xxxx/'; // 文件处理后你想存放的目录
var config= {
src: src_file,
dist: dist_file,
js: {
src: src_file + 'src/js/**/*.js', // 你的js目录
dist: dist_file + 'src/js', // js文件打包后存放的目录
},
};
module.exports = config;
这只是个最简单的小例子,要是有其它的往里加就好了,html,css,img,还有一些静态文件等。
关键的来了,我们把处理方法写在gulpfile.xxx.js里面。
gulpfile.xxx.js:
var gulp = require('gulp');
var rename = require('gulp-rename'); //重命名
var babel = require("gulp-babel");
var uglify = require('gulp-uglify'); //js压缩
var config = require('./gulpfile.config.js');
var runSequence = require('run-sequence');
var rev = require('gulp-rev');//版本号管理的一些东西,先写进来吧,懒的在敲了
var revCollector = require('gulp-rev-collector');
var cssUrl = './dist/xxx/src/css/*.css',
jsUrl = './dist/xxx/src/js/*.js';
function haha() {
gulp.task('js', function () {
return gulp.src(Config.js.src)
.pipe(babel())
.pipe(uglify())
.pipe(gulp.dest(config.js.dist));
});
gulp.task('revJs', function(){
return gulp.src(jsUrl)
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('dist/xxx/src/js'));
});
gulp.task('revHtml', function () {
return gulp.src(['dist/xxx/src/js/**/*.json', 'chaohuo/*.html']) /*后面本地html文件的路径,可自行配置*/
.pipe(revCollector(
{ replaceReved:true }
))
.pipe(gulp.dest('dist/chaohuo')); /*Html更换css、js文件版本,和本地html文件的路径一致*/
});
gulp.task('dev', function (done) {
condition = false;
runSequence(
['revJs'],
['revHtml'],
done);});
gulp.task('default', ['js','dev']);
}
module.exports = haha;
天啊,我本来想一步步来写清楚点的,没想到一下子把版本号相关的也都写进去了,那就算了吧,一起来吧。
下面是gulpfile.js文件:
var haha= require('./gulpfile.prod.js');
haha();
基本工作已经完成一大半了,还有一个忘记说了。如果你用到了es6语法,千万别忘记配置一个.babelrc文件.
.babelrc内容:
"presets": [
"es2015",
],
"plugins": [
"transform-remove-strict-mode"//这个插件就是添加版本号的关键。
]
}
有的小伙伴可能会遇到版本号不断叠加的问题,还记得{ replaceReved:true }这个吗,前面有看一下,记得添加这个。还有最后一步node_modules我们要更改一些代码,来吧,我下的最新的包(如果你用的老的,也是差不多的改法),替换下。
gulp-path里的index.js两个return的东西都改掉:
return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`);改为return modifyFilename(pth, (filename, ext) => `${filename}${ext}`);
return modifyFilename(pth, (filename, ext) => filename.replace(new RegExp(`-${hash}$`), '') + ext);改为return modifyFilename(pth, (filename, ext) => filename + ext);
gulp-rev-collector里的index.js:
大概128行左右
patterns.push( escPathPattern( (path.dirname(key) === '.' ? '' : closeDirBySep(path.dirname(key)) ) )
+ path.basename(key, path.extname(key))
.split('.')
.map(function(part){
return escPathPattern(part) + '(' + opts.revSuffix + ')?';
})
.join('\\.')
+ patternExt
);
这段改为
patterns.push( escPathPattern( (path.dirname(key) === '.' ? '' : closeDirBySep(path.dirname(key)) ) + path.basename(key, path.extname(key)) ) + opts.revSuffix + escPathPattern( path.extname(key) ) + "(\\?v=(\\d|[a-z]){8,10})*" );
这里相关的也是网上查了很多相关的资料,不过好像都是一些老版本,并且gulp-rev里的文件不用修改,这里也经过多次测试,以上基本可用。
好了,离成功不远了,cmd运行下gulp命令,ok,基本完成,可以去查看下啦!
注意:所有require的东西记得npm安装哦,卡的话就cnpm,不多说。
还有由于很多东西都是手打的,可能会有部分拼写呀,文件路径的错误,记得检查更改哦。
本来想详细写一写的,今天就这样吧,开小差到这里结束,小姐姐也要去搬砖啦。有问题可发我,我有时间会回的。有点乱,勿怪。
来源:http://www.jianshu.com/p/b558447e011b
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
go语言区块链学习调用智能合约
![](https://img.aspxhome.com/file/2023/6/130736_0s.png)
XML简易教程之三
PL/SQL 日期时间类型函数及运算
Pytorch深度学习经典卷积神经网络resnet模块训练
![](https://img.aspxhome.com/file/2023/4/120304_0s.png)
JDBC利用C3P0数据库连接池连接数据库
![](https://img.aspxhome.com/file/2023/8/93148_0s.jpg)
用正则表达式表示不包含2950的字符串
Python3安装Pymongo详细步骤
![](https://img.aspxhome.com/file/2023/4/88024_0s.png)
Vue2.0系列之过滤器的使用
![](https://img.aspxhome.com/file/2023/9/139769_0s.png)
Django中数据在前后端传递的方式之表单、JSON与ajax
将python图片转为二进制文本的实例
![](https://img.aspxhome.com/file/2023/1/77641_0s.jpg)
GO语言利用K近邻算法实现小说鉴黄
python 遍历字符串(含汉字)实例详解
SQLServer2005重建索引前后对比分析
深入理解TCP协议与UDP协议的原理及区别
![](https://img.aspxhome.com/file/2023/0/131960_0s.png)
SQLServer 2008中通过DBCC OPENTRAN和会话查询事务
TypeScript类型检查详谈及火爆原因
![](https://img.aspxhome.com/file/2023/1/131811_0s.png)
解决Windows10不能安装Oracle 11g的问题(附详细安装教程)
![](https://img.aspxhome.com/file/2023/3/63723_0s.jpg)
Python实现的本地文件搜索功能示例【测试可用】
![](https://img.aspxhome.com/file/2023/2/111942_0s.png)
vue.js 表格分页ajax 异步加载数据
Python 专题二 条件语句和循环语句的基础知识
![](https://img.aspxhome.com/file/2023/3/107613_0s.jpg)