2016-07-19 46 views
1

我已经决定启动版本的自定义CSS和JS文件我在WP主题使用,这样,当我更新网站不需要重新加载页面显示的变化对于用户来说(我知道很久以前)。自定义脚本和CSS版本的最佳实践和自动化与gruntjs

只是加入了版本号在通话结束一个查询字符串,并(在“的script.js?V = XYZ”作为)保持真正的文件名静一个好的做法呢?当版本号未更改时,这会如何影响浏览器缓存?它会正常缓存,只有当我更改版本号时才会获得新版本?

如果上面的路要走,我想用Grunt自动化,所以当我运行我的“构建”命令时,PHP文件在WP中入队的PHP文件被修改为包含随机散列+日期作为wp_enqueue_script命令中的版本参数。我认为,当我运行我的开发命令与livereload和一切,有说版本的脚本不会影响livereload,所以我不需要删除版本,正确? 你会如何做到这一点,你会使用什么npm模块,以及我需要添加到我的Gruntfile.js中的命令是什么?

作为一个旁注,我知道由wordpress默认添加到所有脚本和css的版本号被认为是一种安全风险,因为它暴露了您正在滚动的WP版本,并且我一直通过functions.php将其删除,但是,我想启用它,但它没有使用WP版本,而是每个WP更新随机更改的东西。任何想法如何实现这个?我很惊讶,我无法找到这样做的插件。

非常感谢你,社区!

+2

欢迎光临。我们了解代码行,而不是文学。如果您希望获得帮助,请分享您的代码。请阅读[如何提问](http://stackoverflow.com/help) –

回答

1

我已经肯定做到了这一点,为表明他们应该下载一个样式表的较新版本的浏览器的方式。这不是特别优雅,但有一件事我所做的声明缓存无效化参数(在你的例子XYZ)作为PHP常数:

// inc/constants.php 
define('CACHEPARAMETER', '20161027'); 

我的呼噜声生成任务修改此使用grunt-text-replace

replace: { 
     cacheparam: { 
      src: ['inc/constants.php'], 
      overwrite: true,     // overwrite matched source files 
      replacements: [{ 
       from: /'CACHEPARAMETER', '[0-9]{8}'/g, 
       to: "'CACHEPARAMETER', '<%= grunt.template.today('yyyymmdd') %>'" 
      }] 
     } 
    } 

我在functions.php的入队这个,我这样做:

include "inc/constants.php"; 
wp_enqueue_style('my-style', get_stylesheet_uri(), array(), CACHEPARAMETER); 

希望这有助于。