heyday / silverstripe-hashpath
Hash path在SilverStripe模板中提供了一个功能,该功能接受一个资产路径,并返回包含该资产哈希值的路径
3.1.0
2023-09-11 00:07 UTC
Requires
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Hash Path在SilverStripe模板中提供了一个功能,该功能接受一个资产路径,并返回一个附加了文件哈希值的修改后路径。结合Web服务器的重写规则,可以通过更改发送到浏览器的文件URL来完全避免浏览器缓存,因为文件在更改时其URL也会更改。
// Template: $HashPath(css/style.css) // Rendered: ↙ File hash /themes/my-theme/css/style.vpOQ8F6ybteKQQYND5dzZQ.css
许可证
Hash Path遵循MIT许可证
安装
Composer
使用Composer安装非常简单,
在你的SilverStripe项目根目录中创建或编辑一个composer.json
文件,并确保以下内容存在。
{ "require": { "heyday/silverstripe-hashpath": "^3.0.0" } }
完成此步骤后,在终端或类似的环境中导航到SilverStripe根目录,并运行composer install
或composer update
,具体取决于你是否已经使用了Composer。
Web服务器配置
由于Hash Path返回的路径在磁盘上不存在,因此需要在Web服务器中添加一个重写规则,以便返回原始给Hash Path的文件。URL格式是在文件扩展名之前插入.v[hash]
,因此最终结果是.v[hash].[extension]
。
Apache
以下内容需要添加到你的.htaccess
文件或虚拟主机配置中。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(v[A-Za-z0-9]+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
</IfModule>
Nginx
# Hashpath module
location /themes {
rewrite "^(.+)\.(?:v\w{10,32})\.(js|css|png|jpg|gif)$" $1.$2 last;
try_files $uri =404;
}
如何使用
如果设置了正确的主题,你只需调用$HashPath
,并将资产相对于当前主题的位置作为第一个参数。
例如,对于位于themes/my-theme/js/general.js
的文件,并且当前主题为my-theme
,使用
<script src="$HashPath("js/general.js")"></script>
将会得到
<script src="/themes/my-theme/js/general.v54473acf909c645bb14f011d86a47733.js"></script>
如果你想要使用一个与当前主题无关的资产,使用
<script src="$HashPath("/my-module/js/general.js", 0)"></script>
单元测试
PHP Unit现在随SS提供
运行单元测试
从命令行
vendor/bin/phpunit silverstripe-hashpath/tests
贡献
代码规范
此项目遵循以下标准定义