3

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

目前,我的 LESS 文件在 Sublime Text 3 中的“保存”时自动编译(所以这在我的 grunt 任务中还没有发生)。然后,我打开我的终端并运行“ 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 文件。')

这是我的 Gruntfile.js

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

提前感谢您的帮助!

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

4

2 回答 2

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

于 2015-04-15T12:46:58.243 回答
0

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

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

是你要找的吗?

于 2015-04-15T12:35:59.293 回答