如何将composer的vendor文件夹中的CSS和JS文件复制到public?

Dyl*_*lan 13 css php laravel composer-php phalcon

我刚开始学习几个PHP框架.我尝试过的例子都是composer我以前没用过的,所以对我来说还不是很清楚.

我指定了一些JS和CSS库composer.json并运行composer install.现在这些库已添加到该vendor文件夹中.

现在,我应该如何使用这些文件夹中的JS和CSS文件bootstrap/dist/css/bootstrap.min.css?我试过的例子只是在public/css文件夹中有一个副本或使用远程链接,就像<link href="//netdna.bootstrapcdn.com/bootswatch/2.3.1/united/bootstrap.min.css" rel="stylesheet">volt-file中一样.

出于某种原因,我不喜欢在我的应用程序中使用这样的远程链接(我担心它们有一天可能会"失败").但另一种选择是不是很漂亮,以及,我想,既然我还是要选择正确的文件从复制vendorpublic.

是不是有"自动"方式来做到这一点?或者可以将其指定到控制器中,然后将其复制到控制器中public

Jen*_*och 6

编写Composer是为了获取PHP依赖项.它与其他Web资产(如CSS或JS文件)不兼容.

Composer资产插件

为了解决获取资产的问题,Composer Asset Plugin是由FrançoisPluchino(fxp)开发的.它为Composer提供了NPM/Bower依赖管理器.它是这些依赖管理器的桥梁,并将这些东西提取到供应商文件夹中.

请记住,您可以直接使用Bower或NPM.使用composer.json中定义的Composer获取PHP依赖项.使用bower.json中定义的Bower获取您的资产.这可能是一种更清洁的方法.

文档 - Packagist

您可能需要从CLI获取它: composer require fxp/composer-asset-plugin

例如,要获取资产"Twitters Bootstrap"和"Jquery":

{
    "require": {
        "bower-asset/bootstrap":     "dev-master",
        "bower-asset/jquery-2.1.0":  "2.1.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

一些框架为资产提供自定义处理程序,主要是为了支持其各自的文件夹布局,并将东西从vendor文件夹复制到正确的位置.我不知道Phalcon是否有东西可以获取资产.

是不是有"自动"方式来做到这一点?或者可能通过将其指定到控制器中,然后将其复制到公共文件中?

供应商文件夹中的资产复制到应用程序布局中的正确位置是另一回事.

没有自动的方法这样做.你必须自己提供这种机制.

例如,您可能会改变从供应商到public/assets某个东西的安装路径,请参阅https://github.com/francoispluchino/composer-asset-plugin/blob/master/Resources/doc/index.md#define-a-custom-目录换了资产的安装

该插件不会复制周围的东西.

Bower + Grunt(简要说明:使用Bower获取资产,使用Grunt复制内容)

最接近"指定控制器"的是设置Grunt任务,只将Bower的相关内容提取复制web/assets/vendorweb/assets/app文件夹.

换句话说:即使是像Bower这样的JS包管理器也不能自动复制主API文件.Bower会将最新的jQuery版本提取到已定义的供应商文件夹中,但它不会自动复制jquery.min.jsweb/assets/js/jquery.min.js.你需要一个任务.