12

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

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

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

无论如何,您如何在项目中更新 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 仅使用一个名为 Packagist 的存储库,该存储库仅用于 PHP 库。但是,正如这里所建议的,您可以为 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"

以及带有构建说明的结帐后挂钩。对于 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 供应商加载到目录下的某个文件夹中web

这篇文章描述了如何使用deps文件来做到这一点。而这篇文章- 如何通过作曲家做到这一点。

于 2012-11-10T17:49:48.373 回答