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`;