2015-02-07 91 views
5

有人可以解釋在Laravel 5中管理資產的正確方法嗎? 例如,我們假設我想要使用bower安裝一些插件。按照我的建議,保留所有文件到/vendor/bower_components。所以我得到了一些CSS,一些圖像,字體和JavaScript文件插件。在Laravel 5中管理資產

另外我有一個「app.less」,在那裏我導入我需要的所有東西,比如@import ('../../../vendor/bower_components/someplugin/somestyle.css')。但問題是,我的公共目錄中沒有images/js/fonts。好的,我看到你可以使用gulp copy函數。但是,當插件數量越來越多時,我應該如何管理每個插件保留其圖片或其他文件的位置?

其實我想嘗試語義ui。我已經用涼亭下載了它。我對語義ui一無所知,但是有一個帶有semantic-ui.css的dist文件夾。還有一些字體文件themes/basic/assets/fonts。如果我只是把它複製給公衆,它會是public/themes/basic/assets/fonts。然後我將semantic-ui.css導入到我的app.les中,它會找到必要的字體。如果我有其他插件,那麼管理這一切將變得無法忍受。

這個問題的典型工作流程是什麼?最簡單的方法就像將所有內容公開化並使用<link><script>標籤手動包含它,但它需要很多查詢。

爲什麼把所有的bower_components都放在公共區域很不好?根據作曲家的類比,我們沒有自動裝載機,所以資產很混亂。

回答

1

您在推薦放置bower_components的地方是正確的。建議不要將bower_components放在公共目錄中,因爲它包含特定包中的所有文件,而不僅僅是需要包含在HTML中的文件。

由於您在談論Laravel5時,建議使用laravel-elixir來管理資產。 它利用吞嚥,可以編譯少,sass或各種其他文件。我對語義UI沒有任何經驗,但看起來與引導類似。沒有npmjs.org上提供的SaaS或Less版本,您需要將必要的文件複製到公共目錄中。 Elixir提供了將文件或整個目錄從bower_components複製到公用目錄的簡單方法。

最簡單的方法來包含所有需要的文件,而不需要很多或者是使用saas或更少。

+1

那麼,我應該怎麼做,如果鮑爾依賴包含圖像/字體,應該從公衆可訪問?好的,我使用gulp將它們複製,但.css文件包含這些圖片/字體的路徑。我不能隨意移動它們,所以我的公共目錄最終可能會像「public/plugin_1_assets/some_dir_structure/img」,「public/plugin_2_assets/img」或類似的東西? – Victor 2015-02-08 07:08:24

1
Personally what I do is this using node 


var elixir = require('laravel-elixir'); 

var nodeDir = './node_modules/'; //This is the node directory(base directory) where all vendor files are downloaded in your case might be different 

/* 
|-------------------------------------------------------------------------- 
| Elixir Asset Management 
|-------------------------------------------------------------------------- 
| 
| Elixir provides a clean, fluent API for defining some basic Gulp tasks 
| for your Laravel application. By default, we are compiling the Sass 
| file for our application, as well as publishing vendor resources. 
| 
*/ 
elixir(function(mix) { 
mix the styles and copy fonts to my public/css folder 

    mix.styles([ 
     'bootstrap/dist/css/bootstrap.css', 
     'font-awesome/css/font-awesome.css' 
    ], './public/css/app.css', nodeDir) 
     .copy(nodeDir + 'font-awesome/fonts', 'public/fonts') 
     .copy(nodeDir + 'bootstrap/fonts', 'public/fonts'); 

//mix javascript from node directory and output to public/js/ folder 

    mix.scripts([ 
     'jquery/dist/jquery.js', 
     'bootstrap/dist/js/bootstrap.js' 

    ], './public/js/app.js', nodeDir); 


});