4

我使用的是 Rails 4.2,文档指出指纹是根据编译文件的内容计算的 md5 摘要。

如果我们拿一个文件说application-4c697a2e67b1a921abbdc1f753c465d8.js4c697a2e67b1a921abbdc1f753c465d8是 md5 摘要。问题是我们永远无法通过从同一个文件的内容生成 md5 来获得相同的值。

我在某处读到此指纹不仅基于文件,而且还受到环境以及链轮版本的影响。

有人可以解释或列出用于生成此指纹的内容(文件内容除外)吗?如果有人可以从rails sprockets repo(最好是sprockets 2.12.5)添加参考,那将非常有帮助。

4

2 回答 2

3

摘要似乎建在这里:https ://github.com/rails/sprockets/blob/master/lib/sprockets/digest_utils.rb

看起来那里有很多逻辑,但这就是找到答案的地方。

看起来实际的哈希是通过调用ADD_VALUE_TO_DIGEST[obj.class].call(obj, digest)build_digest方法创建的。

好问题; 我在查找此内容时学到了一些东西。

于 2018-08-09T15:27:47.237 回答
2

Rails 4.2.x 确实如此,不确定其他版本

针对文件生成 md5 涉及三个部分(以相同的顺序连接)。

  1. 链轮::版本。
  2. 在此处生成的 Rails.application.assets.version ( https://github.com/rails/sprockets-rails/blob/2.x/lib/sprockets/railtie.rb#L91 )。
  3. 编译的文件内容。

sprockets 2.x(用于捆绑资产)中的实际摘要计算正在此处完成BundledAsset#L30

于 2018-08-09T15:43:22.977 回答