【问题标题】:How do I set up Bootstrap after downloading via Composer?通过 Composer 下载后如何设置 Bootstrap?
【发布时间】:2013-10-07 17:48:00
【问题描述】:

我是 Composer 的初学者,所以对它知之甚少,对 Web 应用程序开发经验也很少。

我正在阅读Nettuts+ 教程,并且有一个关于 Composer 的基本问题。

{
  "require": {
    "laravel/framework": "4.0.*",
    "way/generators": "dev-master",
    "twitter/bootstrap": "dev-master",
    "conarwelsh/mustache-l4": "dev-master"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*",
    "mockery/mockery": "0.7.*"
  },
  "autoload": {
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  },
  "scripts": {
    "post-update-cmd": "php artisan optimize"
  },
  "minimum-stability": "dev"
}

如果我如上所述设置了我的composer.json 文件,在执行composer install --dev 之后,如何使 Bootstrap 可用于 Laravel 项目?

我的意思是,我可以看到 Bootstrap 包已下载到供应商目录。之前我只使用从其官网下载 Bootstrap 并手动将文件放在 Laravel 的公共目录中,但是这里的正确方法是什么?我可以将 Bootstrap 文件留在原处吗,因为我想定期将 Bootstrap 包更新到其最新版本?

谢谢。

【问题讨论】:

    标签: laravel laravel-4 twitter-bootstrap-3 composer-php


    【解决方案1】:

    在 Windows 环境下使用 composer post update script (post-update-cmd) 的解决方案可能是:

    {
      "require": {
        "twbs/bootstrap": "4.3.1"
      },
      "scripts": {
        "post-update-cmd": [
          "RMDIR public\\assets\\bootstrap /S /Q" ,
          "XCOPY /E /I vendor\\twbs\\bootstrap\\dist public\\assets\\bootstrap"
        ]
      }
    }
    

    您将在public\assets\bootstrap 文件夹中准备好以 HTML 格式导入的引导文件。

    【讨论】:

      【解决方案2】:

      我是 Laravel 和 Bootstrap 的新手(以及将它们一起使用),当遇到同样的问题时,我偶然发现了这个线程。我创建了一个新的 Laravel 项目,然后通过在 Laravel 项目的根目录中运行以下命令来添加 Bootstrap:

      %composer 需要 twbs/bootstrap

      然后,在我的视图文件中,我包含了以下代码:

      <link href="css/app.css" rel="stylesheet">
      

      似乎 composer(或 bootstrap)通过引用添加了 app.css,其中包含 Bootstrap css 文件(位于非公共供应商文件夹中)。添加对 app.css 的引用有效,并且我能够在我的视图中使用 Bootstrap 组件。

      【讨论】:

        【解决方案3】:

        正如教程所说,您必须将其复制到您的公共目录:

        cp vendor/twitter/bootstrap/docs/assets/js/html5shiv.js public/js/html5shiv.js
        cp vendor/twitter/bootstrap/docs/assets/js/bootstrap.min.js public/js/bootstrap.min.js
        

        编辑:

        您确实可以复制它们,因为您的资产文件应该仅位于 public 文件夹中,而 Composer 就是将软件包放在供应商的文件夹中,必须不可见 到外面的世界。

        但是你可以创建一个 Composer post-install-cmd:

        {
            "scripts": {
                "post-update-cmd": "MyVendor\\MyClass::postUpdate",
            }
        }
        

        并让它在每次更新时为您复制这些文件。它可以使用 PHP、bash 或您可以在主机上运行的任何其他语言编写。文档:http://getcomposer.org/doc/articles/scripts.md.

        【讨论】:

        • 在使用 composer update 获得更新版本的引导程序后,我必须重新复制它们,对吗?我想我可以从使用 composer 中获得一些自动好处。
        • 为什么不只是符号链接来自公共的已安装库的供应商文件夹...然后您将其用作参考而不是复制。
        • 时间和功能现在已经过去了 - composer 很乐意安装到许多框架的公共文件夹中。此功能称为composer installers
        【解决方案4】:

        这对我来说效果更好

        "scripts": {
            "post-update-cmd": [
                "mkdir -p html/vendor/",
                "ln -sfr vendor/twbs/bootstrap/dist html/vendor/bootstrap"
            ]
        },
        

        “r”标志使符号链接相对,从而指向真正的文件夹

        【讨论】:

          【解决方案5】:

          刚刚意识到php artisan asset:publish --path="vendor/twbs/bootstrap/dist/" bootstrapphp artisan vendor:publish --path="vendor/twbs/bootstrap/dist/" bootstrap不再起作用了。

          对我有用的是编辑 composer.json 在scriptspost-update-cmd 下添加以下内容:

          "scripts": {
                  "post-update-cmd": [
                      "php artisan optimize",
                      "mkdir -p public/bootstrap",
                      "cp -R vendor/twbs/bootstrap/dist/ public/bootstrap/"
                  ]}
          

          【讨论】:

          • 确保你也将它添加到 post-install-cmd 否则它只会在 composer update 之后才能工作,而不是 composer install
          • 对于我必须使用的 Windows,"if not exist public\\bootstrap mkdir public\\bootstrap", "xcopy /s /e vendor\\twbs\\bootstrap\\dist public\\bootstrap"
          【解决方案6】:

          只需像上面LeviXC所说的那样对文件夹进行符号链接:

          {
              "scripts": {
                "post-update-cmd": "ln -sf vendor/twitter/bootstrap/dist/ public/vendor/bootstrap/"
              }
          }
          

          或多个命令:

          {
              "scripts": {
                  "post-update-cmd": [
                     "php artisan optimize",
                     "ln -sf vendor/twitter/bootstrap/dist/ public/vendor/bootstrap/"
                  ]
              },
          }
          

          【讨论】:

          • 这对我不起作用,它会创建一个指向子文件夹的符号链接,即它试图链接到 public/static/vendor/twbs/bootstrap/dist。但是如果我改用../../vendor...,它会返回一个错误。
          【解决方案7】:

          我们有 artisan 命令来发布资产(CSS、JS、..)。这样的事情应该可以工作。

          php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/css" bootstrap/css
          php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/js" bootstrap/js
          

          我不确定路径..但​​这应该可行。

          【讨论】:

          • ...或php artisan asset:publish --path="vendor/twitter/bootstrap/dist/" bootstrap
          • 我可以把它放在我的 composer.json 中
          • @briankip 是的,你可以。请参考安东尼奥卡洛斯的回答。或者,您可以使用 gulp 和 sass/scss 来执行相同的操作。
          • 我不想为作曲家创建一个脚本文件,我认为作曲家可以内联运行工匠命令,如果你明白我的意思,而不用命令调用脚本。
          • @briankip Composer 和 artisan 命令并没有那么接近……它们是两个不同的东西。试试 gulp。
          猜你喜欢
          • 2014-11-01
          • 2016-03-28
          • 2016-02-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-04
          • 2011-09-23
          相关资源
          最近更新 更多