>在本文中,您將學習如何使用Laravel的Artisan命令行工具以及如何創建自定義命令。請注意,您需要熟悉Laravel框架才能充分利用本文。
>
<span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
和三個選項:
- 路徑:默認情況下,命令存儲在應用程序/命令文件夾中,但是,您可以使用此選項更改該命令。
- 名稱空間:您可以使用此選項來命名您的一組命令,例如在命令命令中:make,make命令在命令名稱空間下。<span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
我們的cssmincommand類擴展了IlluminateConsolecommand並覆蓋兩種方法(getArguments,getOptions)。
>執行您的命令時,將調用火法,因此我們需要放置命令邏輯。
註冊命令
>如果您不想將命令放入artisan.php文件中,則可以創建一個單獨的文件並包含它,或者如果您創建一個軟件包,則可以在服務提供商中註冊。
參數
在我們的getArguments方法中,我們將定義輸出和文件。<span>use Illuminate<span>\Console\Command</span>; </span><span>use Symfony<span>\Component\Console\Input\InputOption</span>; </span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span> <span>class CssminCommand extends Command{ </span> <span>protected $name = 'cssmin'; </span> <span>protected $description = 'Command description.'; </span> <span>public function __construct(){ </span> <span><span>parent::</span>__construct(); </span> <span>} </span> <span>public function fire(){ </span> <span>// </span> <span>} </span> <span>protected function getArguments(){ </span> <span>return array( </span> <span>array('example', InputArgument<span>::</span>REQUIRED, 'An example argument.'), </span> <span>); </span> <span>} </span> <span>protected function getOptions(){ </span> <span>return array( </span> <span>array('example', null, InputOption<span>::</span>VALUE_OPTIONAL, 'An example option.', null), </span> <span>); </span> <span>} </span><span>}</span>
模式:可以具有三個選項之一:
<span>Artisan<span>::</span>add( new CssMinCommand ); </span> <span>//or through the container </span><span>Artisan<span>::</span>add( App<span>::</span>make("CssMinCommand") );</span>
>
<span>array( 'name', 'mode', 'description', 'defaultValue' )</span>
>
快捷方式:您選項的較短版本(例如: - Verbose和-v)。模式:可以是四個選項之一(inputoption :: value_is_array,inputoption :: value_optional,inputoption :: value_required,inputoption :: value_none),前三個值與參數相似。
<span>protected function getArguments(){ </span> <span>return array( </span> <span>array( </span> <span>'output', </span> <span>InputArgument<span>::</span>REQUIRED, </span> <span>'Path to output directory' </span> <span>), </span> <span>array( </span> <span>'files', </span> <span>InputArgument<span>::</span>IS_ARRAY | InputArgument<span>::</span>OPTIONAL , </span> <span>"List of css files to minify" </span> <span>), </span> <span>); </span> <span>}</span>
,所以我們的getOptions方法將是:
<span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
當我們的火法被稱為時,我們需要收集我們的論點和選擇。我們可以單獨的功能為我們做到這一點:
><span>use Illuminate<span>\Console\Command</span>; </span><span>use Symfony<span>\Component\Console\Input\InputOption</span>; </span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span> <span>class CssminCommand extends Command{ </span> <span>protected $name = 'cssmin'; </span> <span>protected $description = 'Command description.'; </span> <span>public function __construct(){ </span> <span><span>parent::</span>__construct(); </span> <span>} </span> <span>public function fire(){ </span> <span>// </span> <span>} </span> <span>protected function getArguments(){ </span> <span>return array( </span> <span>array('example', InputArgument<span>::</span>REQUIRED, 'An example argument.'), </span> <span>); </span> <span>} </span> <span>protected function getOptions(){ </span> <span>return array( </span> <span>array('example', null, InputOption<span>::</span>VALUE_OPTIONAL, 'An example option.', null), </span> <span>); </span> <span>} </span><span>}</span>
參數和選項方法以鍵作為參數並返回適當的值。
<span>Artisan<span>::</span>add( new CssMinCommand ); </span> <span>//or through the container </span><span>Artisan<span>::</span>add( App<span>::</span>make("CssMinCommand") );</span>
>最後,我們的火法只會調用這兩種方法:
<span>array( 'name', 'mode', 'description', 'defaultValue' )</span>
提示:您也可以使用呼叫方法運行外部命令。
<span>protected function getArguments(){ </span> <span>return array( </span> <span>array( </span> <span>'output', </span> <span>InputArgument<span>::</span>REQUIRED, </span> <span>'Path to output directory' </span> <span>), </span> <span>array( </span> <span>'files', </span> <span>InputArgument<span>::</span>IS_ARRAY | InputArgument<span>::</span>OPTIONAL , </span> <span>"List of css files to minify" </span> <span>), </span> <span>); </span> <span>}</span>
第一個命令將在public/css目錄上創建兩個文件(style.min.css,willsive.min.css)。
<span>array('name', 'shortcut', 'mode', 'description', 'defaultValue')</span>
因為我們使用了 - comments和 - concat標誌,所以我們將獲得一個名為all.min.css的文件,其中包含兩個文件,其中剩下的兩個文件。
><span>protected function getOptions(){ </span> <span>return array( </span> <span>array('comments', 'c', InputOption<span>::</span>VALUE_NONE, 'Don\'t strip comments' , null), </span> <span>array('concat', null, InputOption<span>::</span>VALUE_NONE, 'Concat the minified result to one file' , null), </span> <span>); </span> <span>}</span>
>
改進命令在我們繼續之前,在最終的github存儲庫之前,我將為我們的命令創建一個新標籤,以便您可以切換和測試每個標籤。
使命令有點冗長,Laravel為我們提供了一些輸出功能:這將輸出:
在僅顯示消息之外,您可以向用戶詢問信息,例如:
<span>private function init(){ </span> <span>// retrun an array </span> <span>$this->files = $this->argument('files'); </span> <span>// return a string </span> <span>$this->output_path = $this->argument('output'); </span> <span>// return true if passed, otherwise false </span> <span>$this->comments = $this->option('comments'); </span> <span>// return true if passed, otherwise false </span> <span>$this->concat = $this->option('concat'); </span><span>}</span>
>
詢問方法將向用戶詢問輸入,而不僅僅是y/n,如果將其留為空,則返回默認值。>選擇方法將為用戶提供一個編號列表以供您選擇,如果將其剩下,則返回默認值。
秘密方法將提示用戶提出問題並隱藏鍵入,但是將返回用戶輸入。
<span>private function minify( $css, $comments ){ </span> <span>// Normalize whitespace </span> <span>$css = preg_replace( '/\s+/', ' ', $css ); </span> <span>// Remove comment blocks, everything between /* and */, unless preserved with /*! ... */ </span> <span>if( !$comments ){ </span> <span>$css = preg_replace( '/\/\*[^\!](.*?)\*\//', '', $css ); </span> <span>}//if </span> <span>// Remove ; before } </span> <span>$css = preg_replace( '/;(?=\s*})/', '', $css ); </span> <span>// Remove space after , : ; { } */ > </span> <span>$css = preg_replace( '/(,|:|;|\{|}|\*\/|>) /', '', $css ); </span> <span>// Remove space before , ; { } ( ) > </span> <span>$css = preg_replace( '/ (,|;|\{|}|\(|\)|>)/', '', $css ); </span> <span>// Strips leading 0 on decimal values (converts 0.5px into .5px) </span> <span>$css = preg_replace( '/(:| )0\.([0-9]+)(%|em|ex|px|in|cm|mm|pt|pc)/i', '.', $css ); </span> <span>// Strips units if value is 0 (converts 0px to 0) </span> <span>$css = preg_replace( '/(:| )(\.?)0(%|em|ex|px|in|cm|mm|pt|pc)/i', '0', $css ); </span> <span>// Converts all zeros value into short-hand </span> <span>$css = preg_replace( '/0 0 0 0/', '0', $css ); </span> <span>// Shortern 6-character hex color codes to 3-character where possible </span> <span>$css = preg_replace( '/#([a-f0-9])\1([a-f0-9])\2([a-f0-9])\3/i', '#', $css ); </span> <span>return trim( $css ); </span> <span>}//minify</span>
我們的功能現在打印一些有用的消息,以跟踪正在發生的事情。
注意:這將在GitHub存儲庫上標記為我們命令的V2。
>
使用Symfony Console Helper
啟動方法接受兩個參數,$ this->輸出是Symfony控制台中的consoleouput實例。第二個參數是最大步驟數。
><span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
>您可以嘗試使用多個文件的命令或刪除睡眠功能線以查看實時效果。
<span>use Illuminate<span>\Console\Command</span>; </span><span>use Symfony<span>\Component\Console\Input\InputOption</span>; </span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span> <span>class CssminCommand extends Command{ </span> <span>protected $name = 'cssmin'; </span> <span>protected $description = 'Command description.'; </span> <span>public function __construct(){ </span> <span><span>parent::</span>__construct(); </span> <span>} </span> <span>public function fire(){ </span> <span>// </span> <span>} </span> <span>protected function getArguments(){ </span> <span>return array( </span> <span>array('example', InputArgument<span>::</span>REQUIRED, 'An example argument.'), </span> <span>); </span> <span>} </span> <span>protected function getOptions(){ </span> <span>return array( </span> <span>array('example', null, InputOption<span>::</span>VALUE_OPTIONAL, 'An example option.', null), </span> <span>); </span> <span>} </span><span>}</span>
注意:此版本將在最終存儲庫上標記為V3。
結論
在本文中,我們了解瞭如何創建和擴展Laravel命令。 Laravel有很多可以探索的內置命令,您還可以檢查我們在Github上的最終存儲庫以測試最終結果。問題?評論?您想查看更多工匠司令部教程嗎?讓我們知道!
Laravel CSS Minify Command
上的常見問題(常見問題解答)> Laravel Mix如何幫助CSS Minification?
是的,您可以在不使用laravel的情況下縮小CSS文件混合。有幾種在線工具和NPM軟件包可以幫助您縮小CSS文件。但是,建議使用Laravel Mix,因為它與Laravel無縫集成,並提供了一種簡單便捷的方法來管理和優化您的CSS文件。
>> >在Laravel中縮小CSS通常是一個簡單的過程,如果您的CSS文件包含語法錯誤,您可能會遇到問題。這些錯誤會導致縮小過程失敗,從而導致不優化的CSS文件。因此,重要的是要確保您的CSS文件在嘗試縮小它們之前是無錯誤的。
我可以在Laravel中自動化CSS Minification的過程?是的,您可以使用Laravel Mix的版本控制功能來自動化Laravel中CSS縮小的過程。每當您運行生產構建命令時,此功能都會自動減小CSS文件。這樣可以確保您的CSS文件始終得到優化,而無需每次手動縮小它們。
>我可以使用Laravel Mix縮小其他類型的文件嗎?
>我如何確保如何正確提供我的CSS文件?為了確保正確提供了縮小的CSS文件,您可以使用Laravel Mix的版本操作功能。此功能將唯一的哈希附加到您縮小的CSS文件的文件名上,以確保客戶端始終接收您的CSS文件的最新版本。
以上是如何創建Laravel CSS-Minify命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!