使用 Grunt 在文件名末尾添加时间戳

Add a Timestamp to the End of Filenames with Grunt

在我的 G运行t 任务中,在我的文件名末尾添加一个唯一的字符串。我试过 g运行t-contrib-copyg运行t-filerev。他们都无法完成我需要他们做的事情...

目前,我的 LESS 文件在 Sublime Text 3 中的 'save' 上自动编译(所以这还没有发生在我的 g运行t 任务中)。然后,我打开我的终端和 运行 'g运行t',它连接(组合)我的 JS 文件。完成后,g运行t 应该重命名 'dist/css/main.css' 和 'dist/js/main .js',文件名末尾带有 "version"。

我试过:

Here's my Gruntfile.js

所以,明确地说,我不是在要求 "code review" 我只需要知道如何整合一个 "rename" 流程,这样当任务完成时,我将 'dist/css/main.css12345 & dist/js/main.js12345' 没有 'dist/css/main.css' 或 'dist/js/main.js' 留在各自的目录中。

在此先感谢您的帮助!

更新: 试验之后,我最终使用了 grunt-contrib-rename and it works great! I beleieve the same results can be achieved via grunt-contrib-copy,事实上我知道它也是一样的事物。所以两者都会起作用。至于对正则表达式的支持,不确定两者是否都支持它,所以在选择其中一个插件之前可能还有其他值得研究的东西:)

我不确定是否完全理解您想要的结果,但是如果您在 gruntfile 的开头添加一个 var timestamp = new Date().getTime(); 并连接到您的 dest 应该完成这项工作的参数。

dest: 'dist/js/main.min.js' + timestamp

这是你要找的吗?

你的 rename:dist 看起来应该做你想做的,你只需要移动 clean:dist 成为第一个运行的任务(所以它从先前的构建中删除东西而不是当前的建造)。任务的顺序由最后一行的数组定义:

grunt.registerTask('default', ['jshint:dev', 'concat:dist', 'less:dist', 'csslint:dist', 'uglify:dist', 'cssmin:dist', 'clean:dist', 'rename:dist']);

就是说,我不确定您为什么想要这种行为。更常见的做法是将文件的哈希值插入到文件扩展名之前的文件名中。

散列和时间戳之间的区别在于,只要文件内容不变,散列值将始终相同 - 因此,如果您只更改一个文件,则该文件的编译输出将不同,因此浏览器只需要重新下载该文件,同时使用所有其他文件的缓存版本。

将此数字放在文件扩展名之前和文件扩展名之后的区别在于,许多工具(如您的 IDE)的行为会根据扩展名而改变。

对于这个更标准的目标,有很多方法可以实现它,但更常见的方法之一是将 grunt-filerevgrunt-usemin 结合使用,这将创建正确命名的文件并更新您的 HTML 个文件引用这些新文件名