2015-02-07 83 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); 


});