Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

文件 hash 版本的坑

  最近被文件加版本号的问题坑成狗了。有一些古老的项目依然在使用 Grunt,没力气去迁移,只能硬着头皮上。众所周知,Grunt 插件的质量简直呵呵哒,所以各种坑踩不完。给文件加版本号通常会使用文件的 hash 值,明明就这么一件简单的事情都能搞出 Bug 来。
  我遇到的问题是在项目 build 的时候,图片文件在不同的机器会得到不同的 hash 值。一开始我还挺相信这些插件的,毕竟也这么多年了。然而排查了大堆问题之后才发现是 Grunt 插件的问题。我很好奇为什么就算个文件 hash 值也能出问题,于是看了下代码hash.update(grunt.file.read(filepath), fileEncoding);   这里读文件使用 grunt.file.read,读的是文本文件。而图片是二进制数据,把二进制数据强制转换成字符串肯定会有一些非法字符被弄丢,于是得到的就不完全是图片的内容,最终计算出来的 hash 也是错误的。
  一般在同一台机器上 build,即便 hash 计算错误也不会暴露出问题。但如果在多台机器上 build,而且这些机器的系统环境有差异,那么最终生成的代码就无法一致。当然,多台机器 build 同一个项目是不推荐的(只是一些坑让我不得不这么做),所以这个问题可能大家也不会遇到。但是无论如何,Bug 就是 Bug 即便它可能很少暴露出问题。
  本来想提个 Pull Request 的,但是看了看代码几年没更新了于是还是算了。大家丢掉 Grunt 吧,Makefile 都比它好得多,cat xxx | openssl md5 简单粗暴多美。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^