web-dev-qa-db-ja.com

composerのベンダーフォルダにあるCSSファイルとJSファイルをパブリックにコピーするにはどうすればよいですか?

いくつかのPHPフレームワークを学び始めたところです。私が試した例はすべて、これまで使用したことのないcomposerを使用しているため、まだ正確にはわかりません。

composer.jsonでいくつかのJSおよびCSSライブラリを指定し、composer installを実行しました。これで、これらのライブラリがvendorフォルダに追加されました。

bootstrap/dist/css/bootstrap.min.cssなど、これらのフォルダーにあるJSファイルとCSSファイルをどのように使用するのでしょうか。私が試した例では、public/cssフォルダーにコピーを置くか、voltファイルの<link href="//netdna.bootstrapcdn.com/bootswatch/2.3.1/united/bootstrap.min.css" rel="stylesheet">のようなリモートリンクを使用します。

何らかの理由で、アプリケーションでこのようなリモートリンクが気に入らない(いつか「ダウン」する可能性があるのではないかと心配している)。しかし、vendorからpublicにコピーする適切なファイルを選択する必要があるため、他のオプションもあまり美しくないと思います。

これを行うための「自動」方法はありませんか?または、コントローラーに指定して、ファイルをpublicにコピーすることもできますか?

13
Dylan

Composerは、PHP依存関係をフェッチするように作成されています。CSSやJSファイルなどの他のWebアセットではうまく機能しません。

Composer Asset Plugin

アセットのフェッチの問題に対処するために、Composer Asset PluginはFrançoisPluchino(fxp)によって開発されました。ComposerにNPM/Bower依存関係マネージャーを提供します。これらの依存関係マネージャーへのブリッジであり、フェッチします。ベンダーフォルダにあるもの。

BowerまたはNPMはいつでも直接使用できることに注意してください。 PHP依存関係をComposer composer.jsonで定義します。bower.jsonで定義したBowerで取得します。よりクリーンなアプローチかもしれません。

ドキュメント - Packagist

CLIから必要になる場合があります:_composer require fxp/composer-asset-plugin_

たとえば、アセット「TwittersBootstrap」と「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/app_ folder。

言い換えれば、BowerのようなJSパッケージマネージャーでさえ、メインAPIファイルの自動コピーを提供していません。 Bowerは最新のjQueryバージョンを定義済みのベンダーフォルダーにフェッチしますが、_jquery.min.js_を_web/assets/js/jquery.min.js_に自動的にコピーしません。その上にタスクが必要です。

6
Jens A. Koch