12

私の Symfony2 プロジェクトには、多くの JavaScript 依存関係があり、それらを PHP 依存関係と一緒に管理できると便利です。現在、それらをphpの依存関係とともにdepsファイルに追加し、Webディレクトリへのシンボリックリンクを作成しています。次に例を示します。

//deps
[knockout-js]
    git=git://github.com/SteveSanderson/knockout.git

問題は、JavaScript ライブラリ (ほとんどのライブラリ) を複数のファイルから 1 つにコンパイルする必要があることです。そのため、ベンダーをインストール/更新した後、手動でコンパイル スクリプトを実行する必要があります。私の知る限り、bin/vendors スクリプトは、この問題を解決する pre/post update フックをサポートしていません。

とにかく、プロジェクトで JavaScript ベンダーの更新にどのようにアプローチしますか?

4

3 に答える 3

8

より手の込んだ方法があるかもしれません...しかし、私はベーステンプレートのパスを次のように使用しています:

{% javascripts
    filter='yui_js'

    '../vendor/twitter/bootstrap/js/bootstrap-tab.js'
    '../vendor/harvesthq/chosen/coffee/lib/select-parser.coffee'
    '../vendor/harvesthq/chosen/coffee/lib/abstract-chosen.coffee'
    '../vendor/harvesthq/chosen/coffee/chosen.jquery.coffee'

    '@SOTBCoreBundle/Resources/public/js/script.js'
%}
    <script src="{{ asset_url }}"></script>
{% endjavascripts %}
于 2012-07-03T19:55:14.910 に答える
5

Composer を使用して、JavaScript の依存関係を管理することもできます。デフォルトでは、composer は PHP ライブラリのみのリポジトリである Packagist と呼ばれる 1 つのリポジトリのみを使用します。ただし、ここで提案されているように、javascript (またはその他の) ライブラリ用に独自のリポジトリを追加できます。

カスタムノックアウト js リポジトリを追加する composer.json は次のとおりです。

{
    "require": {
        "php": ">=5.3.2",
        "symfony/symfony": ">=2.0.10,<2.1.0-dev",
        "doctrine/orm": ">=2.1.0,<2.2.0-dev",
        "twig/extensions": "*",

        "symfony/assetic-bundle": "2.0.*",
        "sensio/generator-bundle": "2.0.*",
        "sensio/framework-extra-bundle": "2.0.*",
        "sensio/distribution-bundle": "2.0.*",
        "jms/security-extra-bundle": "1.0.*",
        "knockout/knockout-js": "2.1.0"
    },

    "autoload": {
        "psr-0": {
            "Acme": "src/"
        }
    },

    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "knockout/knockout-js",
                "version": "2.1.0",
                "source": {
                    "type": "git",
                    "url": "https://github.com/SteveSanderson/knockout.git",
                    "reference": "v2.1.0"
                }
            }
        },
        {
            "type": "package",
            "package": {
                "name": "knockout/knockout-js",
                "version": "2.0.0",
                "source": {
                    "type": "git",
                    "url": "https://github.com/SteveSanderson/knockout.git",
                    "reference": "v2.0.0"
                }
            }
        }
    ]

}

リポジトリはパッケージ (ライブラリのソースとバージョンの組み合わせ) で構成されます。ここでは、2 つのパッケージ (2.1.0、2.0.0) が既にビルド済みのノックアウト js のソースを含んでいるので、何もコンパイルする必要はありません。

現在、最新のコードをコンパイルして使用したい場合があります。このルーチンを自動化するには、git post-checkout フックを使用できると思いました。最新のコードを参照する新しいパッケージを追加します。

    {
        "type": "package",
        "package": {
            "name": "knockout/knockout-js",
            "version": "master",
            "source": {
                "type": "git",
                "url": "https://github.com/SteveSanderson/knockout.git",
                "reference": "master"
            }
        }
    }

必要なセクションでこのパッケージを参照してください。

"knockout/knockout-js": "master"

そして、ビルド手順を含むチェックアウト後のフック。knockout.js の場合は簡単です。

// vendor/knockout/knockout-js/.git/hooks/post-checkout

#!/bin/sh

echo "Building knockout.js";
`cd build && ./build-linux`;
于 2012-07-05T10:53:53.847 に答える
2

何らかの理由で資産バンドルを使用したくない場合は、ディレクトリの下のフォルダーに JavaScript ベンダーをロードするように deps (コンポーザー) をセットアップできますweb

この投稿では、ファイルを使用してそれを行う方法について説明しdepsます。そしてこの投稿- コンポーザーを介してそれを行う方法。

于 2012-11-10T17:49:48.373 に答える