gulp打包引用替换

关于 gulp 的基本使用方法前面有介绍。

Gulp使用指南

昨天,朋友问我一个问题。gulp打包给文件添加 hash 之后,怎么替换其他文件中引用的js(或者css),要替换成打包以后的带有 hash 的那一个文件。

其实主要用到的就是 gulp-revgulp-replace 这两个插件。

有三个js文件

a.js

1
export default 'a';

b.js

1
2
3
4
import a from 'a';
console.log(a)

export default 'b';

main.js

1
2
3
4
5
import a from 'a';
import b from 'b';

console.log(a)
console.log(b)

三个js文件都需要打包并添加hash值。如果默认没有replace操作。那么打包后的main.js中的 import 的内容依旧是原来的。比如 import b from 'b'; 打包后还是 import b from 'b'; 而不是 import b from 'b-XXXXXXXX'; 这样带有hash的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
const gulp = require('gulp');
const rev = require('gulp-rev');
const del = require('del');
const replace = require('gulp-replace');

// 清空打包目录
gulp.task('c', function (cb) {
del(
[
// 这里我们使用一个通配模式来匹配 `mobile` 文件夹中的所有东西
'dist/*',
],
cb
);
});

// 生成带有 hash 的js
gulp.task(
'js',
() =>
gulp
.src(['./src/*js'])
.pipe(gulp.dest('dist')) // 将源文件拷贝到打包目录
.pipe(rev())
.pipe(gulp.dest('dist')) // 将生成的hash文件添加到打包目录
.pipe(rev.manifest('js-rev.json')) // 生成映射文件
.pipe(gulp.dest('dist')) // 将map映射文件添加到打包目录
);

// 替换hash
gulp.task('r', () => {
const manifest = require('./dist/js-rev.json')
for (const key in manifest) {
const newKey = key.split('.')[0];
manifest[newKey] = manifest[key].split('.')[0]
delete manifest[key];
}

return (
gulp
.src('./dist/*.js')
.pipe(replace(/import (\S+) from ('|")(\S+)('|")/g, (match, a, b, c) => {
return `import ${a} from '${manifest[c]}'`
}))
.pipe(gulp.dest('dist'))
);
});

大概的就是上面的配置,至于其他的,比如说要 babel 转译。直接添加相关的插件即可。

在线地址

文章作者: 踏浪
文章链接: https://www.lyt007.cn/技术/gulp打包引用替换.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 平凡的生活,不平凡的人生
支付宝
微信打赏