2016-07-19 85 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); 

希望這有助於。