【问题标题】:Add a Timestamp to the End of Filenames with Grunt使用 Grunt 在文件名末尾添加时间戳
【发布时间】:2023-03-22 05:31:01
【问题描述】:

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

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

我试过了:

  • grunt-contrib-copy('clean:expired' 删除 grunt-contrib-copy' 之前的串联 JS可以重命名文件)
  • 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 可以达到同样的效果,事实上我知道它做同样的事情。所以任何一个都可以。至于对正则表达式的支持,不确定两者是否都支持,所以在选择这些插件之一之前可能还有其他值得研究的东西:)

【问题讨论】:

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


    【解决方案1】:

    您的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 文件以供参考这些新文件名

    【讨论】:

    • 这就是我开始玩它后最终做的事情:) 谢谢!
    • 最后我想要的原因是因为我们的网站是使用名为 NitroSell 的软件构建的。他们有他们的服务器(我们的网站托管在上面)配置的版本控制如我上面提到的那样。由于“MIME 类型错误”(AKA Firefox 不允许 .js12345 文件执行脚本,因为它不是有效的文件类型),我最终遇到了 JS 文件不允许在 Firefox 中运行的错误。这很奇怪,因为 NitroSell 的 JS 文件运行良好。所以是的,我最终开始在扩展之前插入我的版本......再次感谢您的回答!
    【解决方案2】:

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

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

    这是你要找的吗?

    【讨论】:

    • 这也是我做的。我刚刚使用了dest: 'dist/js/main' + date + '.js'var date = '<%= grunt.template.today("yyyymmddHHMM") %>'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多