使用 Webpack Encore 的資源版本控制
厭倦了部署後瀏覽器仍然快取舊版本的資源嗎?透過呼叫 enableVersioning()
,每個檔案名稱現在都會包含一個雜湊值,該雜湊值會在該檔案的內容變更時隨之變更(例如,app.123abc.js
而不是 app.js
)。這讓您可以使用積極的快取策略(例如,遠期 Expires
),因為每當檔案變更時,其雜湊值也會變更,從而忽略任何現有的快取。
1 2 3 4 5 6 7
// webpack.config.js
// ...
Encore
.setOutputPath('public/build/')
// ...
+ .enableVersioning()
為了連結到這些資源,Encore 建立了兩個檔案 entrypoints.json
和 manifest.json
。
從 entrypoints.json
& manifest.json
載入資源
每當您執行 Encore 時,都會在您的輸出資料夾中產生兩個設定檔(預設位置:public/build/
):entrypoints.json
和 manifest.json
。每個檔案都很相似,並且都包含最終版本化檔案名稱的映射。
第一個檔案 – entrypoints.json
– 由 encore_entry_script_tags()
和 encore_entry_link_tags()
Twig 助手使用。如果您正在使用這些助手,那麼您的 CSS 和 JavaScript 檔案將會使用新的版本化檔案名稱呈現。如果您未使用 Symfony,您的應用程式將需要以類似的方式讀取此檔案。
manifest.json
檔案僅用於取得其他檔案(例如字型檔案或圖片檔案)的版本化檔案名稱(儘管它也包含有關 CSS 和 JavaScript 檔案的資訊)。
1 2 3 4 5
{
"build/app.js": "/build/app.123abc.js",
"build/dashboard.css": "/build/dashboard.a4bf2d.css",
"build/images/logo.png": "/build/images/logo.3eed42.png"
}
在您的應用程式中,如果您想要能夠連結(例如,透過 img
標籤)到某些資源,則需要讀取此檔案。如果您使用 Symfony,只需啟用 json_manifest_file
版本控制策略即可。
1 2 3 4 5
# this file is added automatically when installing Encore with Symfony Flex
# config/packages/assets.yaml
framework:
assets:
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
就是這樣!請務必像平常一樣將每個路徑包裝在 Twig asset()
函式中。
1
<img src="{{ asset('build/images/logo.png') }}" alt="ACME logo">
本作品,包括程式碼範例,根據 Creative Commons BY-SA 3.0 授權條款授權。