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