如何在symfony2项目中安装/更新javascript供应商?

如何在symfony2项目中安装/更新javascript供应商?,symfony,Symfony,在我的Symfony2项目中,我有许多javascript依赖项,如果能将它们与php依赖项一起管理,那就太好了。现在,我将它们与php依赖项一起添加到deps文件中,并创建指向web目录的符号链接,例如: //deps [knockout-js] git=git://github.com/SteveSanderson/knockout.git 问题是javascript库(大多数)需要从多个文件编译成一个文件。因此,在安装/更新供应商之后,我需要手动运行编译脚本。据我所知,bin/v

在我的Symfony2项目中,我有许多javascript依赖项,如果能将它们与php依赖项一起管理,那就太好了。现在,我将它们与php依赖项一起添加到deps文件中,并创建指向web目录的符号链接,例如:

//deps
[knockout-js]
    git=git://github.com/SteveSanderson/knockout.git
问题是javascript库(大多数)需要从多个文件编译成一个文件。因此,在安装/更新供应商之后,我需要手动运行编译脚本。据我所知,bin/vendors脚本不支持更新前/更新后挂钩,这将解决这个问题


无论如何,您如何在项目中更新javascript供应商

可能有更奇特的方式。。。但我只是使用基本模板中的路径,如下所示:

{% 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 %}
{%javascripts
过滤器='yui_js'
“../vendor/twitter/bootstrap/js/bootstrap tab.js”
“../vendor/harvesthq/selected/coffee/lib/select parser.coffee”
“../vendor/harvesthq/selected/coffee/lib/abstract selected.coffee”
“../vendor/harvesthq/selected/coffee/selected.jquery.coffee”
“@SOTBCoreBundle/Resources/public/js/script.js”
%}
{%endjavascripts%}

Composer也可用于管理javascript依赖项。默认情况下,composer只使用一个名为PackageGist的存储库,该存储库仅用于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"
                }
            }
        }
    ]

}
请参考“要求”部分中的此软件包:

"knockout/knockout-js": "master"
以及带有构建说明的签出后挂钩。对于knockout.js,它很简单:

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

#!/bin/sh

echo "Building knockout.js";
`cd build && ./build-linux`;

如果出于某种原因您不想使用assetic捆绑包,您可以设置您的deps(composer)将javascript供应商加载到
web
目录下的某个文件夹中


描述如何使用
deps
文件执行此操作。和-如何通过composer实现这一点。

这与我的问题无关。如何?您询问了如何在项目中包含供应商javascript。我就是这样做的。。。assetic处理coffee和less文件的编译。问题在于如何安装/更新javascript供应商库。如果您的库是这样包含的,那么它们将与其他库一起更新。我运行所选的
库和
引导库的最新版本,而不运行额外的命令或编译步骤。如果要从bin/vendors执行自定义命令,只需编辑bin/vendors即可。这个脚本是你的应用程序的一部分,而不是供应商代码,所以编辑它来添加你自己的钩子/调用是没有问题的。我终于明白你的意思了。Assetic可以包括来自任何位置的文件,而不仅仅是来自文档根目录的文件。
// vendor/knockout/knockout-js/.git/hooks/post-checkout

#!/bin/sh

echo "Building knockout.js";
`cd build && ./build-linux`;