Подтвердить что ты не робот

Как установить/обновить поставщиков javascript в проекте symfony2?

В моем проекте Symfony2 у меня есть несколько зависимостей javascript, и было бы неплохо, если бы они управлялись вместе с зависимостями php. Прямо сейчас я добавляю их в файл deps вместе с зависимостями php и создаю символическую ссылку на веб-каталог, например:

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

Проблема в том, что библиотеки javascript (большинство из них) должны быть скомпилированы из нескольких файлов в один. Поэтому после установки/обновления вендоров мне нужно запустить скрипты компиляции вручную. Насколько мне известно, bin/vendors script не поддерживает перехват обновлений/сообщений, что позволило бы решить эту проблему.

В любом случае, как вы подходите к обновлению поставщиков javascript в ваших проектах?

4b9b3361

Ответ 1

Там могут быть более приятные способы... но я просто использую пути в базовом шаблоне так:

{% 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 %}

Ответ 2

Композитор может использоваться для управления зависимостями JavaScript. По умолчанию композитор использует только один репозиторий, называемый Packagist, который является репозиторием только для библиотек PHP. Однако, как предложено здесь, вы можете добавить свои собственные репозитории для javascript (или любых других) библиотек.

Здесь мой composer.json, который добавляет пользовательский репозиторий нокаута-js:

{
    "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), которые уже содержат предварительно построенный источник knockout.js, поэтому вам не нужно ничего компилировать.

Теперь вы можете захотеть скомпилировать и использовать последний код. Чтобы автоматизировать эту процедуру, я предположил, что можно использовать git hook после проверки. Добавьте новый пакет, который ссылается на последний код:

    {
        "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`;

Ответ 3

Если по какой-то причине вы не хотите использовать assetic bundle, вы можете настроить deps (composer) для загрузки поставщиков javascript в какую-либо папку в каталоге web.

Этот пост описывает, как это сделать, используя файл deps. И этот пост - как это сделать с помощью композитора.