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

时间:2012-07-03 19:30:23

标签: symfony

在我的Symfony2项目中,我有许多javascript依赖项,将它们与php依赖项一起管理会很不错。现在我将它们与php依赖项一起添加到deps文件中,并为web目录创建一个符号链接,例如:

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

问题是javascript库(大多数)需要从几个文件编译成一个。因此,在安装/更新供应商之后,我需要手动运行编译脚本。据我所知,bin / vendors脚本不支持pre / post更新挂钩,这可以解决这个问题。

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

3 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分:5)

Composer也可用于管理javascript依赖项。默认情况下,composer只使用一个名为Packagist的存储库,它只是PHP库的存储库。但是,根据建议here,您可以为javascript(或任何其他)库添加自己的存储库。

这是我的composer.json,它添加了一个自定义的knockout-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 post-checkout hook。 添加引用最新代码的新包:

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

在require部分中引用此包:

"knockout/knockout-js": "master"

带有构建说明的post-checkout钩子。对于knockout.js来说很简单:

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

#!/bin/sh

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

答案 2 :(得分:2)

如果由于某种原因您不想使用资产包,您可以设置您的deps(编辑器)以将javascript供应商加载到web目录下的某个文件夹中。

This post介绍了如何使用deps文件执行此操作。 this post - 如何通过作曲家来完成。