【问题标题】:Creating a PHP library for Composer with public assets使用公共资产为 Composer 创建 PHP 库
【发布时间】:2016-03-29 13:40:19
【问题描述】:

我正在为客户创建一个模板库。该库的目标是为公司拥有的所有网站提供标准化的外壳。其他开发人员应该能够使用 Composer 导入库并使用几行代码创建一个基本模板,例如:

$Template = new Template;
$Template->setContent('Hello world!');
$Template->render();

这将在标准化外壳中呈现内容。这是一个简化的示例,该库提供了更多功能,例如标准化的滑块、菜单等...

这个库依赖于 Twig,但它也依赖于一堆前端资产;像自定义图像、javascript、css 和 3rd 方的东西,比如 Jquery 和 Bootstrap CSS。这些资产存储在 /assets/ 文件夹中。

使用 Composer 安装库后,所有内容都存储在 /vendors/ 文件夹中,该文件夹位于网站的根目录中。但是 /assets/ 文件夹需要在 /public_html/ 中才能访问。

目前的解决方案:只需将 /assets/ 文件夹复制到 /public_html/ 即可。但我确信有更多的存储库取决于前端资产,使这些资产在 /public_html/ 中可用的最常见方法是什么?

【问题讨论】:

    标签: php repository composer-php


    【解决方案1】:

    我想到的关闭的东西是 Symfony2 Bundle 系统。您定义的每个捆绑软件都必须在 AppKernel 中注册。如果捆绑包包含将在 /web/bundles/short_bundle_name/ 文件夹下链接或复制的资产。

    因此,为了能够跟踪依赖项的资产,您将需要某种注册表机制,以便您可以注册哪些库具有需要复制/链接到 public_html 文件夹下的资产。

    还可以考虑使用资产处理具有缓存清除功能的普通资产(合并、重写和其他过滤器)。

    【讨论】:

      【解决方案2】:

      您可以将Composer 用于后端依赖项,将Bower 用于您的前端,并使用Grunt 来移动和处理文件。

      使用Composer,您将以下内容添加到您的composer.json

      "scripts": {
          "post-install-cmd": [
              "bower install",
              "grunt"
          ],
          "post-update-cmd": [
              "bower install",
              "grunt"
          ]
      }
      

      然后你就有了基本的Bower 脚本bowser.json

      {
          "name": "my/project",
          "dependencies": {
              "jquery": "*",
              "bootstrap": "*"
          }
      }
      

      然后你就有了基本的Grunt 脚本gruntfile.js,你可以像这样使用它(https://github.com/gruntjs/grunt-contrib-copy)。

      copy: {
        main: {
          expand: true,
          src: 'src/*',
          dest: 'dest/',
        },
      },
      

      现在您只需运行您的 composer 命令来安装或更新您的所有文件。

      注意:如果您的所有资产都在Composer中,则不需要使用Bower

      【讨论】:

        最近更新 更多