在我的Symfony2项目中,我有许多javascript依赖项,将它们与php依赖项一起管理会很不错。现在我将它们与php依赖项一起添加到deps文件中,并为web目录创建一个符号链接,例如:
//deps
[knockout-js]
git=git://github.com/SteveSanderson/knockout.git
问题是javascript库(大多数)需要从几个文件编译成一个。因此,在安装/更新供应商之后,我需要手动运行编译脚本。据我所知,bin / vendors脚本不支持pre / post更新挂钩,这可以解决这个问题。
无论如何,你如何在项目中更新javascript供应商?
答案 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)