如何創建Laravel CSS-Minify命令
>在本文中,您將學習如何使用Laravel的Artisan命令行工具以及如何創建自定義命令。請注意,您需要熟悉Laravel框架才能充分利用本文。
>鑰匙要點
- 利用Laravel Artisan:利用Laravel的Artisan命令行工具為CSS Minification創建自定義命令,提高了Web開發項目的工作流效率。
- >自定義命令創建:輕鬆地使用`php工匠命令:用命名,存儲和命名區的選項創建自定義命令,允許在Laravel應用程序中量身定制功能。 >
- 縮小選項:在您的命令中實現選項來處理CSS文件串聯和評論保存,提供了基於不同開發需求的靈活性。
- 命令註冊:確保在Laravel的Artisan系統中註冊您的新命令,以使其可執行,無論是通過'artisan.php`文件還是用於包裝開發的服務提供商。 >
- 執行和輸出:使用命令來縮小CSS文件,並具有可選的串聯和註釋保存標誌,並在執行過程中提高命令反饋。
在本教程中,我們將構建一個命令來縮小我們的CSS資產,將其使用:
<span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
- file1 ... fileen :(必需)要縮小的文件列表。 >
- - 註釋:(可選)添加此選項以保持註釋。
- - concat :(可選)將縮小文件串成一個名為all.min.css的文件
- 什麼是laravel命令 Artisan是Laravel的命令行實用程序的名稱。它帶有一組預定義命令,您可以使用PHP工匠列表列出。如果要顯示特定命令的幫助,則可以使用PHP Artisan幫助命令。
要創建一個工匠命令,您可以使用命令:make命令。此命令接受一個參數:
>名稱:命令的類名稱。
和三個選項:
- - 命令:應輸入運行命令的名稱。
- 路徑:默認情況下,命令存儲在應用程序/命令文件夾中,但是,您可以使用此選項更改該命令。
- 名稱空間:您可以使用此選項來命名您的一組命令,例如在命令命令中:make,make命令在命令名稱空間下。- >
- 現在,要創建我們的命令,我們將使用php工匠命令:make cssmincommand -command = cssmin,他們將在我們的app/commands目錄中創建一個cssmincommand.php文件。
- >>>>>>>>>>
<span>cssmin 'output_path' 'file1'...'fileN' --comments --concat</span>
登入後複製登入後複製登入後複製登入後複製我們的cssmincommand類擴展了IlluminateConsolecommand並覆蓋兩種方法(getArguments,getOptions)。
>- > getArguments:此功能返回應該傳遞給命令的一系列參數(例如:我們傳遞給CSSMIN命令的文件列表)。 > getOptions:返回您可能傳遞給命令的選項列表或開關。 (例如 - -Comments)。
> 執行您的命令時,將調用火法,因此我們需要放置命令邏輯。
註冊命令
如果您嘗試運行我們的命令PHP Artisan cssmin'Args'您將獲得命令“ CSSMIN”。
要註冊一個命令,您需要將其添加到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>
登入後複製登入後複製- > inputargument :: Required:需要參數。
- Inputargument ::可選:參數是可選的。 >
- inputargument :: is_array:參數接受多個值(ex:file1 ... fileen)。
但是,您可以將它們結合起來,例如Inputargument :: iS_array | InputArgument ::必需(必需參數,必須是一個數組)。
- > >描述:打印命令幫助時有用。
- > defaultValue:如果未提供參數。
- >
>
注意:使用IS_Array參數時,應該是返回的參數數組中的最後一個。 (顯然)。 - >選項
- 我們的CSSMIN命令只有兩個選項。為了定義一個選項,我們通過數組:
>名稱:您選項的名稱(例如:註釋)。<span>array( 'name', 'mode', 'description', 'defaultValue' )</span>
登入後複製登入後複製>
快捷方式:您選項的較短版本(例如: - Verbose和-v)。>
模式:可以是四個選項之一(inputoption :: value_is_array,inputoption :: value_optional,inputoption :: value_required,inputoption :: value_none),前三個值與參數相似。
value_none:指示該選項是布爾旗(ex: - verbose)。<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>
登入後複製登入後複製- 描述:在打印命令幫助時有用。
- > > defaultValue:如果未提供選項值。
- >
- >
<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>
登入後複製登入後複製提示:您也可以使用呼叫方法運行外部命令。
> 要測試我們的命令,我們將將一些CSS文件複製到我們的public/css目錄中,然後運行命令。<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>
登入後複製登入後複製><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為我們提供了一些輸出功能:在僅顯示消息之外,您可以向用戶詢問信息,例如:
> 如果用戶類型與y/n。<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,如果將其留為空,則返回默認值。>
>選擇方法將為用戶提供一個編號列表以供您選擇,如果將其剩下,則返回默認值。
秘密方法將提示用戶提出問題並隱藏鍵入,但是將返回用戶輸入。
實際上,Laravel只是使Symfony的遊戲機API更簡單,更詳細,如果您想挖進去,還有更多。<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>
登入後複製- >
- >讓我們的命令更加詳細,並使用戶對執行的任務進行更新。
> > -
- Symfony提供了一個函數,可讓您輕鬆打印這樣的桌子。檢查文檔中的示例。我們將看到接下來如何使用一些Symfony控制台助手。
>
使用Symfony Console Helper為了說明某些符號助手的使用,我們將使用進度助手來保持用戶有關工作進度的最新信息。
在我們的初始方法結束時,我們將需要從助手那裡取得進度,然後開始我們的進度標準。啟動方法接受兩個參數,$ this->輸出是Symfony控制台中的consoleouput實例。第二個參數是最大步驟數。
>>每次我們在processFiles方法中處理文件時,我們都會將進度欄推進一步,當作業完成時,我們將結束進度欄並打印通知消息。<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>
登入後複製登入後複製登入後複製結論
在本文中,我們了解瞭如何創建和擴展Laravel命令。 Laravel有很多可以探索的內置命令,您還可以檢查我們在Github上的最終存儲庫以測試最終結果。問題?評論?您想查看更多工匠司令部教程嗎?讓我們知道!
Laravel CSS Minify Command
上的常見問題(常見問題解答)在Laravel中縮小CSS的目的是什麼?它涉及刪除不必要的字符,例如從CSS文件中的空格,評論和線路中斷。此過程減少了CSS文件的大小,這又減少了需要傳輸給客戶端的數據量。這可以顯著改善您的網站或應用程序的負載時間,提供更好的用戶體驗。
> Laravel Mix如何幫助CSS Minification?
Laravel Mix是一種功能強大的工具,可提供流利的工具用於定義WebPack的API為您的Laravel應用程序構建步驟。它支持幾個常見的CSS和JavaScript前處理器,包括縮小。通過使用Laravel Mix,您可以輕鬆地使用單個命令來縮小CSS文件,而無需手動刪除不必要的字符。這不僅節省了時間,而且還可以確保您的CSS文件盡可能優化。 我可以在不使用laravel mix的情況下縮小CSS文件嗎?是的,您可以在不使用laravel的情況下縮小CSS文件混合。有幾種在線工具和NPM軟件包可以幫助您縮小CSS文件。但是,建議使用Laravel Mix,因為它與Laravel無縫集成,並提供了一種簡單便捷的方法來管理和優化您的CSS文件。
>>在Laravel中縮小CSS時可能會遇到的潛在問題?
> >在Laravel中縮小CSS通常是一個簡單的過程,如果您的CSS文件包含語法錯誤,您可能會遇到問題。這些錯誤會導致縮小過程失敗,從而導致不優化的CSS文件。因此,重要的是要確保您的CSS文件在嘗試縮小它們之前是無錯誤的。
如果在CSS Minification期間遇到問題,我如何在CSS Minification in Laravel中的CSS Minification中調試問題?在Laravel中,您可以使用Laravel Mix的源地圖功能進行調試。源地圖是將縮小的CSS文件映射回原始源文件的文件,使您可以輕鬆地跟踪和解決任何問題。
我可以在Laravel中自動化CSS Minification的過程?是的,您可以使用Laravel Mix的版本控制功能來自動化Laravel中CSS縮小的過程。每當您運行生產構建命令時,此功能都會自動減小CSS文件。這樣可以確保您的CSS文件始終得到優化,而無需每次手動縮小它們。
> CSS Minification如何影響我的Laravel應用程序的性能?
css Minification可以顯著提高性能您的Laravel申請。通過減少CSS文件的大小,您可以減少需要傳輸到客戶端的數據量。這可能會導致加載時間更快,提供更好的用戶體驗。
>我可以使用Laravel Mix縮小其他類型的文件嗎?
是的,除了CSS文件,也可以使用Laravel Mix縮小JavaScript文件。這可以進一步優化您的Laravel應用程序,減少需要將需要傳輸到客戶端的數據量。>縮放和串聯CSS文件之間有什麼區別?不必要的字符降低大小,同時串聯CSS文件涉及將多個CSS文件組合到一個文件中。這兩個過程都可以幫助優化您的Laravel應用程序,但它們的目的不同。縮小縮小每個單獨的CSS文件的大小,同時通過將多個文件組合到一個。
>我如何確保如何正確提供我的CSS文件?為了確保正確提供了縮小的CSS文件,您可以使用Laravel Mix的版本操作功能。此功能將唯一的哈希附加到您縮小的CSS文件的文件名上,以確保客戶端始終接收您的CSS文件的最新版本。
- >讓我們的命令更加詳細,並使用戶對執行的任務進行更新。
以上是如何創建Laravel CSS-Minify命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
