齿轮 / assetmini
Requires
- php: >=5.4
- gears/installer: *
- gears/string: *
- leafo/scssphp: *
- natxet/cssmin: *
- oyejorge/less.php: *
- tedivm/jshrink: *
README
基于 PHP 的 JS 和 CSS 资产压缩。
本项目旨在使您的 JS 和 CSS 资产最小化。是的,市场上有很多类似的产品。我们如何区别,我们提供了哪些功能?
-
通常情况下,它将所有 CSS 或 JS 文件合并在一起,然后对输出进行压缩和 GZIP 压缩,从而得到最终的负载。
-
然后它会缓存这个输出,以便 NGINX 或 Apache 可以直接提供输出,而无需接触 PHP。
-
视图助手类会自动在需要时使缓存无效。
-
它还可以解析 LESS/SASS 文件,因此您可以在 CSS 中使用变量和其他酷炫功能。它甚至可以即时编译 Twitter Bootstrap
-
在调试模式下,它将单独加载标准的 CSS 和 JS 文件,不进行压缩或不进行压缩。
-
在调试模式下,LESS 文件仍然会被解析,但同样不会进行压缩或压缩。
如何安装
通过 composer 安装非常简单
composer require gears/assetmini:*
如何使用它?
首先,当您安装 assetmini 时,它会尝试在您的项目根目录中创建一个名为 assets 的文件夹,如果该文件夹不存在。请放心,我们不会覆盖任何东西。
如果您想将资产文件夹放在其他地方,请将以下内容添加到您的 composer.json
文件中。请注意,这只是一个示例。
"extra": { "assetmini-dir": "./public/assets" }
无论您如何创建资产文件夹,都应该看起来像这个项目的 'skel' 文件夹。
此外,请注意,缓存文件夹需要可由 PHP 写入。
Apache 应该开箱即用。这是通过包含一个 .htaccess 文件来实现的。如果使用视图助手,它甚至会更新 .htaccess 文件以具有正确的 RewriteBase 路径。
为了配置 Nginx,您可以这样做
location ~* \.(css|js)$
{
try_files $uri /assets/min.php?$uri;
expires max;
gzip_static on;
gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
log_not_found off;
access_log off;
}
此块将捕获所有压缩过的 CSS 或 JS 请求。我们使用 try_files 来测试是否存在已压缩版本,如果不存在,我们将让 PHP 为我们生成它。请确保您将 Nginx 指向 min.php 的正确位置
一旦您的 PHP 服务器设置完成并开始使用适当的重写,您就可以像这样使用视图助手
require('vendor/autoload.php');
AssetMini::setDebug(true);
AssetMini::css(['file1','file2','file3','etc']);
AssetMini::js(['file1','file2','file3','etc']);
关于 AssetMini 范围的说明。 Composer 会加载一个名为 Globalise.php
的文件,这个文件只是检查全局范围内是否存在名为 \AssetMini
的类。如果不存在,它将使用 class_alias
函数将 \Gears\AssetMini\HtmlHelper
类别名到 \AssetMini
。
这意味着您不再需要在每个需要使用 AssetMini 的 PHP 脚本中放置以下内容
use Gears\AssetMini\HtmlHelper as AssetMini;
我对这个功能有点犹豫,并愿意听取大家的意见。如果您认为这是愚蠢的,请告诉我...
手动设置路径
对于大多数设置,AssetMini 可能会猜测您项目的基准 URL 和路径,但如果不行,您可能需要自己这样做。
设置基本URL
AssetMini::setBaseUrl('http://example.org/custom/path/to/assets');
设置基本路径
AssetMini::setBasePath('/var/www/vhosts/example_org/custom/path/to/assets');
需要注意的一些事项
- 现在您需要负责检测http/https。
- 您还必须确保htaccess RewriteBase设置正确。
- 在两种情况下,确保没有尾部斜杠。
- 您不能只做其中之一而不做另一个。
点表示法文件夹/文件名
首先,如果您熟悉Laravel,这基本上与指定视图名称的方式相同。我可以在这里啰嗦一会儿,但我觉得用例子展示更简单。
假设您的资源文件夹看起来像这样
/assets
/js
/jquery
/plugins
/googlemaps.js
/migrate.js
/jquery.js
/modernizr.js
要加载这些资源,PHP代码将是
AssetMini::js ([ 'modernizr', 'jquery.jquery', 'jquery.migrate', 'jquery.plugins.googlemaps' ]);
预压缩资源
如果您之前使用过某种压缩工具,您可能很熟悉这种情况:未压缩时工作正常,但一旦压缩代码,就会全部崩溃并失败。
没有两种压缩程序是完全相同的,虽然其中一种可能在同一源代码上工作,而另一种则不行。我确实非常喜欢AssetMini,但我也首先承认有时我们甚至无法做到完美。
无论如何,我没有编写压缩代码,您可以感谢Robert Hafner和Joe Scylla……并向他们发送所有bug hahaha :)
回到主题。为了解决这个问题,您可以提供一个预压缩资源。只需确保文件名包含'.min.',我们将跳过压缩过程。我们仍然会将文件与任何其他资源组合,并对其进行gzip压缩。
Laravel集成
我已经为Laravel包含了一个ServiceProvider和Facade。您在Laravel项目中需要做的只是像上面那样require assetmini。然后,将以下内容添加到您的main config/app.php
文件中。
// Add to the providers array 'Gears\AssetMini\Laravel\ServiceProvider'
// Add to the aliases array 'AssetMini' => 'Gears\AssetMini\Laravel\Facade'
做出贡献
这个项目首先是一个工具,帮助我创建出色的网站。因此,自然地,我会根据我的使用来定制。我只是那些决定分享代码的非常善良的人之一,这样我就会感到温暖和舒适。这就是开源的全部意义,对吧 :)
如果您觉得您有一些很棒的新功能,或者发现了我没有注意到的bug,我会非常乐意听取您的意见。只需在github项目上创建一个新的问题,并可选地向我发送一个pull request。
由Brad Jones开发 - brad@bjc.id.au