assetic adalah kerangka manajemen aset untuk PHP yang dikelola oleh tim Winter CMS.
<?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 ();
Aset assetic adalah sesuatu dengan konten yang dapat difilter dan dapat dimuat dan dibuang. Aset juga mencakup metadata, beberapa di antaranya dapat dimanipulasi dan beberapa di antaranya tidak dapat diubah.
Milik | Pengakses | mutasi |
---|---|---|
isi | dapatkan Konten | mengatur Konten |
waktu | dapatkanModifikasi Terakhir | tidak ada |
akar sumber | dapatkanSourceRoot | tidak ada |
jalur sumber | dapatkanSourcePath | tidak ada |
jalur sasaran | dapatkanTargetPath | setTargetPath |
Properti "jalur target" menunjukkan di mana suatu aset (atau kumpulan aset) harus dibuang.
Filter dapat diterapkan untuk memanipulasi aset.
<?php
use assetic Asset AssetCollection ;
use assetic Asset FileAsset ;
use assetic Asset GlobAsset ;
use assetic Filter LessFilter ;
use assetic Filter UglifyCssFilter ;
$ css = new AssetCollection ( array (
new FileAsset ( ' /path/to/src/styles.less ' , array ( new LessFilter ())),
new GlobAsset ( ' /path/to/css/* ' ),
), array (
new UglifyCssFilter ( ' /path/to/uglifycss ' ),
));
// this will echo CSS compiled by LESS and compressed by uglifycss
echo $ css -> dump ();
Filter yang diterapkan pada koleksi akan mengalir ke setiap daun aset jika Anda mengulanginya.
<?php
foreach ( $ css as $ leaf ) {
// each leaf is compressed by uglifycss
echo $ leaf -> dump ();
}
Inti menyediakan filter berikut di namespace assetic Filter
:
CoffeeScriptFilter
: mengkompilasi CoffeeScript ke dalam JavascriptCssImportFilter
: sebaris lembar gaya yang diimporCSSMinFilter
: mengecilkan CSSCssRewriteFilter
: memperbaiki URL relatif di aset CSS saat berpindah ke URL baruGoogleClosureCompilerApiFilter
: mengkompilasi Javascript menggunakan Google Closure Compiler APIHandlebarsFilter
: mengkompilasi template Handlebars ke dalam JavascriptJavaScriptMinifierFilter
: mengecilkan JavascriptJpegoptimFilter
: optimalkan JPEG AndaJpegtranFilter
: optimalkan JPEG AndaLessFilter
: mem-parsing LESS ke dalam CSS (menggunakan less.js dengan node.js)LessphpFilter
: mem-parsing LESS ke dalam CSS (menggunakan lessphp)OptiPngFilter
: optimalkan PNG AndaPackerFilter
: mengompres Javascript menggunakan Packer Dean EdwardsPhpCssEmbedFilter
: menyematkan data gambar di stylesheet AndaReactJsxFilter
: mengkompilasi React JSX ke dalam JavaScriptScssphpFilter
: mem-parsing SCSS menjadi CSSSeparatorFilter
: menyisipkan pemisah antar aset untuk mencegah kegagalan penggabunganStylesheetMinifyFilter
: mengompres file CSS stylesheetStylusFilter
: mem-parsing STYL ke dalam CSSTailwindCssFilter
: membuat stylesheet Tailwind CSS menggunakan utilitas CLI mandiri Tailwind CSSTypeScriptFilter
: mem-parsing TypeScript menjadi JavascriptUglifyCssFilter
: mengecilkan CSSUglifyJs2Filter
: mengecilkan JavascriptUglifyJs3Filter
: mengecilkan Javascript Manajer aset disediakan untuk mengatur aset.
<?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/* ' ));
Manajer aset juga dapat digunakan untuk mereferensikan aset untuk menghindari duplikasi.
<?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 ' ),
)));
Manajer filter juga disediakan untuk mengatur filter.
<?php
use assetic FilterManager ;
use assetic Filter ScssFilter ;
use assetic Filter CssMinFilter ;
$ fm = new FilterManager ();
$ fm -> set ( ' sass ' , new ScssFilter ( ' /path/to/parser/scss ' ));
$ fm -> set ( ' cssmin ' , new CssMinFilter ());
Jika Anda memilih untuk tidak membuat semua objek ini dengan tangan, Anda dapat menggunakan pabrik aset, yang akan melakukan sebagian besar pekerjaan untuk Anda.
<?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
' ?cssmin ' , // don't use this filter in debug mode
));
echo $ css -> dump ();
AssetFactory
dibangun dengan direktori root yang digunakan sebagai direktori dasar untuk jalur aset relatif.
Mengawali nama filter dengan tanda tanya, karena cssmin
ada di sini, akan menyebabkan filter tersebut dihilangkan ketika pabrik berada dalam mode debug.
Anda juga dapat mendaftarkan Pekerja di pabrik dan semua aset yang dibuat olehnya akan diteruskan ke metode process()
pekerja sebelum dikembalikan. Lihat Penghancur Cache di bawah untuk contohnya.
Anda dapat membuang semua aset yang disimpan AssetManager ke file dalam direktori. Ini mungkin berada di bawah root dokumen server web Anda sehingga file dapat disajikan secara statis.
<?php
use assetic AssetWriter ;
$ writer = new AssetWriter ( ' /path/to/web ' );
$ writer -> writeManagerAssets ( $ am );
Ini akan memanfaatkan jalur target aset.
Jika Anda menyajikan aset dari file statis seperti yang baru saja dijelaskan, Anda dapat menggunakan CacheBustingWorker untuk menulis ulang jalur target aset. Ini akan memasukkan pengidentifikasi sebelum ekstensi nama file yang unik untuk versi aset tertentu.
Pengidentifikasi ini didasarkan pada waktu modifikasi aset dan juga akan mempertimbangkan aset yang diandalkan jika filter yang diterapkan mendukungnya.
<?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 ();
Mekanisme caching sederhana disediakan untuk menghindari pekerjaan yang tidak perlu.
<?php
use assetic Asset AssetCache ;
use assetic Asset FileAsset ;
use assetic Cache FilesystemCache ;
use assetic Filter JavaScriptMinifierFilter ;
$ jsMinifier = new JavaScriptMinifierFilter ();
$ js = new AssetCache (
new FileAsset ( ' /path/to/some.js ' , array ( $ jsMinifier )),
new FilesystemCache ( ' /path/to/cache ' )
);
// the JavaScriptMinifierFilter compressor will only run on the first call
$ js -> dump ();
$ js -> dump ();
$ js -> dump ();
Untuk menggunakan ekstensi Twig assetic Anda harus mendaftarkannya ke lingkungan Twig Anda:
<?php
$ twig -> addExtension ( new assetic Extension ( $ factory ));
Setelah terpasang, ekstensi akan menampilkan stylesheet dan tag javascript dengan sintaks yang mirip dengan yang digunakan pabrik aset:
{% stylesheets '/path/to/sass/main.sass' filter = 'sass,?yui_css' output = 'css/all.css' %}
< link href = " {{ asset_url }} " type = " text/css " rel = " stylesheet " />
{% endstylesheets %}
Contoh ini akan merender satu elemen link
pada halaman yang menyertakan URL tempat aset yang difilter dapat ditemukan.
Saat ekstensi berada dalam mode debug, tag yang sama ini akan merender beberapa elemen link
, satu untuk setiap aset yang direferensikan oleh glob css/src/*.sass
. Filter yang ditentukan akan tetap diterapkan, kecuali jika ditandai sebagai opsional menggunakan tanda ?
awalan.
Perilaku ini juga dapat dipicu dengan menyetel atribut debug
pada tag:
{% stylesheets 'css/*' debug = true %} ... {% stylesheets %}
Aset ini perlu ditulis ke direktori web agar URL ini tidak menampilkan kesalahan 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 );
assetic didasarkan pada pustaka aset web Python (tersedia di GitHub).