У меня была такая же проблема, и я нашел решение:
Добавьте следующую строку в public/.htaccess
:
RewriteRule ^assets/[a-f0-9]+/(.*)$ /$1 [L]
прямо перед RewriteCond %{REQUEST_FILENAME} !-d
это будет относиться к URL как /assets/ab7320d/css/whatever.css
как /css/whatever.css
Поместите следующий код в resources/assets/js/rewriteMixManifest.js
let fs = require('fs')
let mixManifestPath = `${process.cwd()}/public/mix-manifest.json`
let mixFileContents = fs.readFileSync(mixManifestPath)
let oldMapping = JSON.parse(mixFileContents)
function updateMapping(path) {
if(path.indexOf("?") < 1) {
return path
}
let [filename, idPart] = path.split("?")
let [_, id] = idPart.split("=")
return `/assets/${id}${filename}`
}
let newContent = {}
for(let file in oldMapping) {
newContent[file] = updateMapping(oldMapping[file])
}
console.log("Manifest rewritten.")
fs.writeFileSync(mixManifestPath, JSON.stringify(newContent, null, 2))
В package.json
добавьте следующую строку в scripts
(точно так же, как клавиша «dev»)
"rewrite-manifest": "node resources/assets/js/rewriteMixManifest.js",
После каждой сборки (например, npm run production
) также запускается npm run rewrite-manifest
Что делает файл public/mix-manifest.json
, так это сопоставляет каждый файл ресурсов (для {{ mix('css/app.css') }}
) с какой-то строкой, которая фактически переходит в HTML. Мой скрипт переписывает строку, чтобы поместить версию не в строку запроса, а в путь. .htaccess
гарантирует, что путь интерпретируется правильно.
Структура пути, конечно же, зависит от вас, чтобы она вам понравилась
Для меня это решило проблему с Google Cloud CDN, надеюсь, оно вам тоже поможет