gulp:自动添加版本号以请求阻止浏览器缓存

Dan*_*Dan 17 javascript node.js npm gulp

我通过在服务器上使用gulp构建源文件来部署我的项目.要防止缓存问题,最佳做法可能是为请求URL添加唯一编号,请参阅:防止Web应用程序升级时的浏览器缓存 ;

在npm存储库中,我找不到一个工具来自动添加版本号来请求.我问是否有人之前发明过这样的工具.

可能的实施可能如下:

我在src/文件夹中有一个文件index.html ,带有以下脚本标记

 <script src="js/app.js<!-- %nocache% -->"></script>
Run Code Online (Sandbox Code Playgroud)

在构建期间,它将复制到dist/文件夹,并且注释将由自动增量编号替换

 <script src="js/app.js?t=1234"></script>
Run Code Online (Sandbox Code Playgroud)

Ser*_*ano 20

你可以用gulp-version-number它.它可以通过在URL中附加参数,将版本号添加到HTML文档中的链接脚本,样式表和其他文件中.例如:

<link rel="stylesheet" href="main.css">
Run Code Online (Sandbox Code Playgroud)

变为:

<link rel="stylesheet" href="main.css?v=474dee2efac59e2dcac7bf6c37365ed0">
Run Code Online (Sandbox Code Playgroud)

您甚至不必指定占位符,就像您在示例实现中所示.它是可配置的.

用法示例:

const $ = gulpLoadPlugins();
const versionConfig = {
  'value': '%MDS%',
  'append': {
    'key': 'v',
    'to': ['css', 'js'],
  },
};

gulp.task('html', () => {
  return gulp.src('src/**/*.html')
    .pipe($.htmlmin({collapseWhitespace: true}))
    .pipe($.versionNumber(versionConfig))
    .pipe(gulp.dest('docroot'));
});
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 6

您可以使用该gulp-rev模块。这会将版本号附加到文件中,该版本是文件内容的哈希值,因此仅在文件更改时才会更改。

然后,输出包含的文件,例如之间的映射清单文件Scripts.js,以Scripts-8wrefhn.js.

然后,在返回页面内容以映射正确的值时使用帮助函数。

我已经使用了上面的过程。但是,还有另一个模块gulp-rev-all是gulp-rev的分支扩展,它做了更多的工作,例如,自动更新页面中的文件引用。

此处的文档:


小智 3

看起来你可能有很多选择。

https://www.npmjs.com/package/gulp-cachebust https://www.npmjs.com/package/gulp-buster

希望这可以帮助。

  • 我查看了 gulp-cachebust,但看起来这实际上会在文件名中附加一个哈希值,然后更改对该文件的引用以匹配新的哈希命名版本。如果任务作为服务器端构建脚本(在 git 之后)运行,那么这会很有效。但是,如果您将其作为预部署脚本运行以进行测试,然后提交并上传到您的服务器,则您的 git 存储库中将拥有该脚本的每个哈希版本。为什么这个cachebust会使用这个方法而不是OP建议的方法? (2认同)