anaxago / assetic
PHP的资产管理框架 - 兼容SF4
Requires
- php: >=5.3.1
- symfony/process: ~2.1|~3.0|~4.0|~4.1|~4.2|~4.3|~4.4
Requires (Dev)
- leafo/lessphp: ^0.3.7
- leafo/scssphp: ~0.1
- meenie/javascript-packer: ^1.1
- mrclay/minify: <2.3
- natxet/cssmin: 3.0.4
- patchwork/jsqueeze: ~1.0|~2.0
- phpunit/phpunit: ~4.8 || ^5.6
- psr/log: ~1.0
- ptachoire/cssembed: ~1.0
- symfony/phpunit-bridge: ~2.7|~3.0|~4.0|~4.1
- twig/twig: ~1.23|~2.0
- yfix/packager: dev-master
Suggests
- leafo/lessphp: Assetic provides the integration with the lessphp LESS compiler
- leafo/scssphp: Assetic provides the integration with the scssphp SCSS compiler
- leafo/scssphp-compass: Assetic provides the integration with the SCSS compass plugin
- patchwork/jsqueeze: Assetic provides the integration with the JSqueeze JavaScript compressor
- ptachoire/cssembed: Assetic provides the integration with phpcssembed to embed data uris
- twig/twig: Assetic provides the integration with the Twig templating engine
Conflicts
- twig/twig: <1.27
- v4.4.0
- dev-master / 1.4.x-dev
- v1.4.0
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.2.0-alpha1
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.1.0-beta1
- v1.1.0-alpha4
- v1.1.0-alpha3
- v1.1.0-alpha2
- v1.1.0-alpha1
- v1.0.5
- v1.0.4
- v1.0.3
- dev-kmm50
- dev-node-visitor
- dev-experimental/tree
- dev-pipeline-asset-locator
- dev-asset-locator
- dev-output-collisions
This package is auto-updated.
Last update: 2024-09-10 04:04:54 UTC
README
Assetic 是一个用于 PHP 的资产管理框架。兼容 SF4 - 从 https://github.com/KroneMultimedia/assetic 分支而来
<?php use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; $js = new AssetCollection(array( new GlobAsset('/path/to/js/*'), new FileAsset('/path/to/another.js'), )); // the code is merged when the asset is dumped echo $js->dump();
资产
Assetic 资产是具有可筛选内容的对象,可以被加载和卸载。资产还包括元数据,其中一些可以操作,而另一些是不可变的。
"目标路径"属性表示资产(或资产集合)应该卸载的位置。
过滤器
可以应用过滤器来操作资产。
<?php use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; use Assetic\Filter\LessFilter; use Assetic\Filter\Yui; $css = new AssetCollection(array( new FileAsset('/path/to/src/styles.less', array(new LessFilter())), new GlobAsset('/path/to/css/*'), ), array( new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'), )); // this will echo CSS compiled by LESS and compressed by YUI echo $css->dump();
如果您遍历集合,则应用于集合的过滤器将级联到每个资产叶子上。
<?php foreach ($css as $leaf) { // each leaf is compressed by YUI echo $leaf->dump(); }
核心在 Assetic\Filter 命名空间中提供了以下过滤器
AutoprefixerFilter:使用 autoprefixer 解析和更新供应商特定的属性CoffeeScriptFilter:将 CoffeeScript 编译成 JavaScriptCompassFilter:Compass CSS 编写框架CssEmbedFilter:在样式表中嵌入图像数据CssImportFilter:内联导入的样式表CssMinFilter:最小化 CSSCleanCssFilter:最小化 CSSCssRewriteFilter:在移动到新 URL 时修复 CSS 资产中的相对 URLDartFilter:使用 dart2js 编译 JavaScriptEmberPrecompileFilter:将 Handlebars 模板预编译成 JavaScript 以供 Ember.js 框架使用GoogleClosure\CompilerApiFilter:使用 Google Closure Compiler API 编译 JavaScriptGoogleClosure\CompilerJarFilter:使用 Google Closure Compiler JAR 编译 JavaScriptGssFilter:使用 Google Closure Stylesheets Compiler 编译 CSSHandlebarsFilter:将 Handlebars 模板编译成 JavaScriptJpegoptimFilter:优化您的 JPEG 文件JpegtranFilter:优化您的 JPEG 文件JSMinFilter:最小化 JavaScriptJSMinPlusFilter:最小化 JavaScriptJSqueezeFilter:压缩 JavaScriptLessFilter:将 LESS 解析成 CSS(使用 less.js 和 node.js)LessphpFilter:将 LESS 解析成 CSS(使用 lessphp)OptiPngFilter:优化您的 PNG 文件PackagerFilter:解析 JavaScript 中的打包器标签PackerFilter:使用 Dean Edwards 的 Packer 压缩 JavaScriptPhpCssEmbedFilter:在样式表中嵌入图像数据PngoutFilter:优化您的 PNG 文件ReactJsxFilter:将 React JSX 编译成 JavaScriptSass\SassFilter:将 SASS 解析成 CSSSass\ScssFilter:将 SCSS 解析成 CSSSassphpFilter:使用 Libsass 的 sassphp 绑定将 Sass 解析成 CSSScssphpFilter:使用 scssphp 解析 SCSSSeparatorFilter:在资产之间插入分隔符以防止合并失败SprocketsFilter:Sprockets JavaScript 依赖关系管理StylusFilter:将 STYL 解析成 CSSTypeScriptFilter:将 TypeScript 解析成 JavaScriptUglifyCssFilter:最小化 CSSUglifyJs2Filter:最小化 JavaScriptUglifyJsFilter:最小化 JavaScriptYui\CssCompressorFilter:使用 YUI 压缩器压缩 CSSYui\JsCompressorFilter:使用 YUI 压缩器压缩 JavaScript
资产管理者
提供了资产管理者来组织资产。
<?php use Assetic\AssetManager; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; $am = new AssetManager(); $am->set('jquery', new FileAsset('/path/to/jquery.js')); $am->set('base_css', new GlobAsset('/path/to/css/*'));
资产管理者还可以用来引用资产以避免重复。
<?php use Assetic\Asset\AssetCollection; use Assetic\Asset\AssetReference; use Assetic\Asset\FileAsset; $am->set('my_plugin', new AssetCollection(array( new AssetReference($am, 'jquery'), new FileAsset('/path/to/jquery.plugin.js'), )));
过滤器管理者
还提供了过滤器管理者来组织过滤器。
<?php use Assetic\FilterManager; use Assetic\Filter\Sass\SassFilter; use Assetic\Filter\Yui; $fm = new FilterManager(); $fm->set('sass', new SassFilter('/path/to/parser/sass')); $fm->set('yui_css', new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'));
资产工厂
如果您不想手动创建所有这些对象,可以使用资源工厂,它会为您完成大部分工作。
<?php use Assetic\Factory\AssetFactory; $factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); $factory->setDebug(true); $css = $factory->createAsset(array( '@reset', // load the asset manager's "reset" asset 'css/src/*.scss', // load every scss files from "/path/to/asset/directory/css/src/" ), array( 'scss', // filter through the filter manager's "scss" filter '?yui_css', // don't use this filter in debug mode )); echo $css->dump();
AssetFactory 使用根目录构建,该目录用作相对资源路径的基础目录。
在过滤器名称前加上问号,例如这里的 yui_css,将导致在工厂处于调试模式下时忽略该过滤器。
您还可以在工厂上注册 工作者,并由其创建的所有资源都会在返回之前传递给工作者的 process() 方法。下面是 缓存失效 的示例。
将资源导出到静态文件
您可以将资产管理器持有的所有资源导出到目录中的文件。这通常位于您的网站服务器的文档根目录下,以便可以静态地提供文件。
<?php use Assetic\AssetWriter; $writer = new AssetWriter('/path/to/web'); $writer->writeManagerAssets($am);
这将使用资源的目标路径。
缓存失效
如果您像上面描述的那样从静态文件中提供资源,您可以使用 CacheBustingWorker 重写资源的目标路径。它将在文件扩展名之前插入一个标识符,该标识符对于特定版本的资源是唯一的。
此标识符基于资源的修改时间,如果应用过滤器支持它,还会考虑所依赖的资源。
<?php use Assetic\Factory\AssetFactory; use Assetic\Factory\Worker\CacheBustingWorker; $factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); $factory->setDebug(true); $factory->addWorker(new CacheBustingWorker()); $css = $factory->createAsset(array( '@reset', // load the asset manager's "reset" asset 'css/src/*.scss', // load every scss files from "/path/to/asset/directory/css/src/" ), array( 'scss', // filter through the filter manager's "scss" filter '?yui_css', // don't use this filter in debug mode )); echo $css->dump();
内部缓存
提供了一个简单的缓存机制以避免不必要的操作。
<?php use Assetic\Asset\AssetCache; use Assetic\Asset\FileAsset; use Assetic\Cache\FilesystemCache; use Assetic\Filter\Yui; $yui = new Yui\JsCompressorFilter('/path/to/yuicompressor.jar'); $js = new AssetCache( new FileAsset('/path/to/some.js', array($yui)), new FilesystemCache('/path/to/cache') ); // the YUI compressor will only run on the first call $js->dump(); $js->dump(); $js->dump();
Twig
要使用 Assetic 的 Twig 扩展,您必须将其注册到您的 Twig 环境。
<?php $twig->addExtension(new AsseticExtension($factory));
一旦就位,该扩展会公开类似资产工厂使用的样式表和javascripts标签。
{% stylesheets '/path/to/sass/main.sass' filter='sass,?yui_css' output='css/all.css' %} <link href="{{ asset_url }}" type="text/css" rel="stylesheet" /> {% endstylesheets %}
此示例将在页面上渲染一个包含可以找到已过滤资源的 URL 的 link 元素。
当扩展处于调试模式时,此同一标签将渲染多个 link 元素,每个元素对应于 css/src/*.sass 全局匹配中引用的每个资源。指定的过滤器仍然会被应用,除非它们使用 ? 前缀标记为可选。
通过在标签上设置 debug 属性也可以触发这种行为。
{% stylesheets 'css/*' debug=true %} ... {% stylesheets %}
这些资源需要写入到网络目录,以便这些 URL 不返回 404 错误。
<?php use Assetic\AssetWriter; use Assetic\Extension\Twig\TwigFormulaLoader; use Assetic\Extension\Twig\TwigResource; use Assetic\Factory\LazyAssetManager; $am = new LazyAssetManager($factory); // enable loading assets from twig templates $am->setLoader('twig', new TwigFormulaLoader($twig)); // loop through all your templates foreach ($templates as $template) { $resource = new TwigResource($twigLoader, $template); $am->addResource($resource, 'twig'); } $writer = new AssetWriter('/path/to/web'); $writer->writeManagerAssets($am);