node.js - 使用 Grunt 在文件名末尾添加时间戳

标签 node.js gruntjs grunt-contrib-copy

在我的 Grunt 任务期间,在我的文件名末尾添加一个唯一的字符串。我试过 grunt-contrib-copygrunt-filerev。两者都无法完成我需要他们做的事情...

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

我试过:

  • grunt-contrib-copy ('clean:expired'删除grunt-contrib-copy' 可以重命名文件)
  • grunt-filerev('出于某种原因,这只适用于 CSS 文件,并且它在 '.css' 之前插入了版本号。不确定为什么它不适用于 JS文件。')

Here's my Gruntfile.js

所以,要明确一点,我不是在要求“代码审查”,我只是需要知道如何合并一个“重命名”过程,以便在任务完成时,我将拥有“dist/css/main.css”。 css12345 & dist/js/main.js12345' 在各自的目录中没有 'dist/css/main.css' 或 'dist/js/main.js'。

在此先感谢您的帮助!

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

最佳答案

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

关于node.js - 使用 Grunt 在文件名末尾添加时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634745/

相关文章:

gruntjs - 如何使用 grunt-usemin 处理 css 的绝对 url

javascript - 通过 forEach 循环 grunt 任务以复制具有数组长度的任务

node.js - sails 外水线如何使用?

gruntjs - grunt-useref 和 grunt-usemin 之间的区别?

javascript - NodeJs 语法错误 : Unexpected identifier

css - grunt-sass 两次调用 mixin 导致错误

gruntjs - Grunt Copy Flatten 无法按预期工作

node.js - 如何在 Ionic 3 中使用需要信用卡的功能

node.js - 更新父子数据nodejs mongodb