使用Grunt将时间戳添加到文件名结尾

时间:2015-04-14 18:24:34

标签: node.js gruntjs grunt-contrib-copy

在我的Grunt任务中,在文件名末尾添加一个唯一的字符串。我尝试过 grunt-contrib-copy grunt-filerev 。我们都没能做到我需要它们......

目前我的LESS文件会自动编译在' save'在Sublime Text 3中(所以我的grunt任务中还没有出现这种情况)。然后,我打开终端并运行' grunt ',它连接(组合)我的JS文件。完成此操作后,grunt应重命名' dist / css / main.css '和' dist / js / main.js '使用"版本"在文件名的末尾。

我试过了:

  • grunt-contrib-copy (' clean:过期 '在 grunt之前删除连接的JS -contrib-copy '可以重命名文件)
  • grunt-filerev ('由于某些原因,这仅适用于CSS文件,并且在' .css'之前插入了版本号。不知道为什么它没有处理JS文件。')

Here's my Gruntfile.js

所以,要明确的是,我并不是要求进行代码审查"我只需要知道如何合并"重命名"过程,以便任务完成后,我将有' dist / css / main.css12345& DIST / JS / main.js12345'没有' dist / css / main.css'或' dist / js / main.js'留在各自的目录中。

提前感谢您的帮助!

更新: 经过实验,我最终使用了grunt-contrib-rename,效果很好!我认为可以通过grunt-contrib-copy获得相同的结果,事实上我知道它做同样的事情。所以要么会奏效。至于对正则表达式的支持,不确定是否都支持它,所以在选择其中一个插件之前可能还有其他值得研究的东西:)

2 个答案:

答案 0 :(得分:0)

我不确定完全理解你想要什么,但是如果你在 gruntfile 的开头添加var timestamp = new Date().getTime();并连接到你的dest param那个应该做的。

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

这是你想要的吗?

答案 1 :(得分:0)

你的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文件( s)引用这些新文件名