如何将composer的供应商文件夹中的CSS和JS文件复制到公共?

Posted

技术标签:

【中文标题】如何将composer的供应商文件夹中的CSS和JS文件复制到公共?【英文标题】:How to copy the CSS and JS files in vendor folder of composer to public? 【发布时间】:2016-03-27 01:30:54 【问题描述】:

我刚刚开始学习几个 php 框架。我尝试的示例都使用了composer,我之前没有使用过,所以我还不太清楚。

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

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

出于某种原因,我不喜欢在我的应用程序中使用这样的远程链接(我担心有一天它们可能会“关闭”)。 但我认为另一个选项也不是很漂亮,因为我仍然需要选择正确的文件从vendor复制到public

难道没有“自动”的方式来做到这一点吗?或者也许通过将它指定到控制器中,然后将文件复制到 public 中?

【问题讨论】:

【参考方案1】:

Composer 是为了获取 PHP 依赖项而编写的。 它不能很好地与其他网络资源(如 CSS 或 JS 文件)配合使用。

作曲家资产插件

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

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

Documentation - 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"
    

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

难道没有一种“自动”的方式来做到这一点吗?或者也许通过将其指定到控制器中,然后将其复制到公共文件中?

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

没有自动执行此操作的方法。您必须自己提供机制。

例如,您可以将安装路径从供应商更改为public/assets 或其他东西, 见https://github.com/francoispluchino/composer-asset-plugin/blob/master/Resources/doc/index.md#define-a-custom-directory-for-the-assets-installation

插件不会复制周围的东西。

Bower + Grunt(简而言之:使用 Bower 获取资源,使用 Grunt 复制内容)

最接近“指定控制器”的方法是设置 Grunt 任务,仅将使用 Bower 获取的相关内容从 web/assets/vendor 复制到 web/assets/appfolder。

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

【讨论】:

谢谢,有一件事我还不明白:为什么我需要一个单独的资产依赖管理器,因为所有正确的资产似乎也由作曲家下载/安装。或者您的意思是某些 JS 文件可能依赖于其他包,例如需要 'jQuery' 的 'jQuery UI' ?这个插件是否也将它们下载到“供应商”? 独立的依赖管理器具有干净的配置文件的优势。您不必将前缀配置内容添加到 composer.json 即可使桥接器正常工作。单独的配置,你知道什么去哪里。 PHP composer.json 资产 bower... -- 是的,资产也可能具有依赖关系。. 换句话说,可能值得看看 Bower 的 JS 和 CSS 资产。 -- 是的,Composer 资产插件会将它们下载到供应商文件夹,除非您自己定义自定义目录或复制/移动文件。 我在答案中添加了 Bower + Grunt 的组合。 是的,是的,如此完整的回复,我在同一天调查的内容得出了相同的结论,难怪你是最好的贡献者之一,你的回复总是值得至少两票单用户——

以上是关于如何将composer的供应商文件夹中的CSS和JS文件复制到公共?的主要内容,如果未能解决你的问题,请参考以下文章

Lumen Composer 无法检测新创建项目中的供应商文件夹

供应商文件夹中的 symfony 是啥?

如何使用 Webpack 将供应商 CSS 文件捆绑到 React 应用程序中?

如何在Zend Framework3中更新composer更新时集成simplesamlphp库和更新配置

如何自动将浏览器前缀添加到 CSS3 属性?

Elastic Beanstalk 中的 PHP Mailer 类无法识别