1
0
mirror of https://github.com/restoreddev/phpapprentice.git synced 2025-08-04 13:57:40 +02:00

Added ability to version assets for browser cache busting

This commit is contained in:
Andrew Davis
2018-09-12 22:00:18 -05:00
parent 3f9679ff5b
commit c2bfe21c7a
5 changed files with 66 additions and 3 deletions

View File

@@ -8,9 +8,9 @@
<meta name="description" content="<?= $subtitle ?? 'A site for learning how to use PHP' ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/css/site.css">
<link rel="stylesheet" href="<?php echo asset('css/site.css') ?>">
<link rel="icon" href="/favicon-32.png">
<script src="/js/site.js"></script>
<script src="<?php echo asset('js/site.js') ?>"></script>
</head>
<body>

View File

@@ -3,7 +3,18 @@
use Apprentice\Page;
return [
/*
*
* Directory for SVG icons that can be used in templates
*
*/
'icon_dir' => __DIR__ . '/assets/icons',
/*
*
* Directory holding code files used in examples
*
*/
'code_dir' => __DIR__ . '/code',
'templates_dir' => __DIR__ . '/assets/templates',
'output_dir' => __DIR__ . '/.build',

View File

@@ -147,3 +147,24 @@ function config(string $key) {
return $config[$key] ?? null;
}
/**
* Returns path to asset based on manifes.json file
*
* @param string $name
* @return string
*/
function asset(string $name): string {
$outputDir = config('output_dir');
if (file_exists($outputDir . '/manifest.json')) {
$text = file_get_contents($outputDir . '/manifest.json');
$paths = json_decode($text, true);
if (isset($paths[$name])) {
return $paths[$name];
}
}
return '/' . $name;
}

View File

@@ -4,9 +4,20 @@ namespace Test;
class FunctionsTest extends BaseTestCase
{
public function setUp()
{
mkdir('/tmp/apprentice_output');
}
public function tearDown()
{
$GLOBALS['PARTIAL_TEST'] = null;
$files = glob('/tmp/apprentice_output/*');
foreach ($files as $file) {
unlink($file);
}
rmdir('/tmp/apprentice_output');
}
public function test_load_config()
@@ -56,4 +67,23 @@ class FunctionsTest extends BaseTestCase
$this->assertEquals('test var', $GLOBALS['PARTIAL_TEST']);
}
public function test_asset_path_with_manifest()
{
file_put_contents(
'/tmp/apprentice_output/manifest.json',
json_encode(['js/app.js' => '/js/app-1234.js'])
);
$path = asset('js/app.js');
$this->assertEquals('/js/app-1234.js', $path);
}
public function test_asset_path_without_manifest()
{
$path = asset('js/app.js');
$this->assertEquals('/js/app.js', $path);
}
}

View File

@@ -11,7 +11,8 @@ Encore
"languages": ["php"],
"css": false,
}]);
});
})
.enableVersioning();
;
module.exports = Encore.getWebpackConfig();