Jak programove vynutit stahnuti aktualnich js a css souboru
- Honza.Mottl
- Člen | 104
hledam zpusob jak programove vynutit stahnuti aktualnich js a css souboru. Cilem je, aby uzivatel mel z hlediska apikace ty aktualni verze (nikoliv podle nepredvidatelneho rozhodnuti browseru). A by uzivatel nemusel sam delat reload, protoze na to zapomene, i kdyz to bude mit na strance napsane. A nestahovat zbytecne.
Zatim jsem nasel rady typu
<script language="JavaScript" src="js/myscript.js?version=1"></script>
To ale v Chromiu zpusobi, ze se soubor reloaduje pokazde. Prece jen bych pokazde stahovat vse nechtel.
Jak to resite?
- David Matějka
- Moderator | 6445
To ale v Chromiu zpusobi, ze se soubor reloaduje pokazde.
tohle se mi nezda. nemas nahodou v development konzoli v chromiu vypnutou cache?
- Honza.Mottl
- Člen | 104
Ne, cache vypnutou nemam. Ani jsem nevedel jak se to delal, dokud jsi mne na
to neupozornil :)
Jakmile dam za jmeno js GET parametr, tak se necachuje. Stejne zkusenosti jsem
nasel na stackoverflow. Bez GET parametru mi to cachuje.
Asi pujdu smerem unikatmi cesty jak navrhujes.
Aplikace je ve zkusebnim provozu a zmeny tam davam temer denne. Proto si musim
co nejvice usetrit praci pri deploy. Musi to byt jednoduche:
- udelam si promennou appVersion s verzi aplikace
- ve vyvojove verzi to bude prazdny retezec
- na testovacim serveru prejmenuji soubory css a js na {$appVersion}soubor.xxx a nastavim prislusne promennou
<link rel="stylesheet" href="{$basePath}/css/{$appVersion}pripad.css" type="text/css" />
<script src="{$basePath}/js/{$appVersion}form.js" type="text/javascript"></script>
Editoval Honza.Mottl (24. 9. 2017 13:53)
- Honza.Mottl
- Člen | 104
Nastaveni appVersion jsem si dal do local.config.neon, abych nemusel pri deploy zasahovat do kodu. Ted mi staci pri deploy:
- nastavit appVersion v local.config.neon
- nastavit prefixy js a css souboru
- mike227
- Člen | 5
Premenovanie súborov je naozaj najlepší spôsob („query string“ robí často problémy).
Ja používam Gulp + n-asset-macro.
Editoval mike227 (24. 9. 2017 20:12)
- Honza.Mottl
- Člen | 104
Diky vsem. Query string je opravdu problematicky. Unikatni jmeno je dobra cesta.
- Dan Hundrt
- Člen | 74
Já to reším tak, že si v metodě přečtu datum změny souboru:
public function getFileVersion($file): int
{
if(file_exists($file)) {
return filemtime($file);
} else {
return 0;
}
}
a v BasePresenteru v metodě beforeRender() volám:
$this->template->versionCSS = $this->getFileVersion(__DIR__ . '/www/css/main.min.css');
$this->template->versionJS = $this->getFileVersion(__DIR__ . '/www/js/main.min.js');
v latte poté:
<link href="{$basePath}/css/main.min.css?v={$versionCSS}" rel="stylesheet">
<script src="{$basePath}/js/main.min.js?={$versionJS}" async defer></script>