我刚刚安装了Symfony 4项目,并在composer.json
中找到了这一部分:
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
],
...
我发现作曲家对第auto-scripts
节的处理方式有所不同:key 是bin/console
命令,值是命令"类型"(在这种情况下是 Symfony 的(。由于它没有记录在 Composer 网站上,我认为这不是法律定义,但它有效,我的问题是 Composer 如何知道如何执行这些命令?作曲家如何知道什么是symfony-cmd
?
正如塞拉德所说。auto-script
由 Symfony/Flex 解析,命令:可执行文件对的"右侧"由此开关处理。
switch ($type) {
case 'symfony-cmd':
return $this->expandSymfonyCmd($cmd);
case 'php-script':
return $this->expandPhpScript($cmd);
case 'script':
return $cmd;
因此,作曲家文档对此只字不提,因为它是特定于Symfony的。
个人不喜欢在 composer.json 根级别将标准作曲家部分与自定义部分混合。它只是让我感到困惑,并将我吸引到无声的作曲家文档中。 命名本身,auto-script
,应该更好。少一些魔力,更不言自明的东西,比如flex-script
.
我想它使用位于composer.json
的extra
配置
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-var-dir": "var",
"symfony-bin-dir": "bin",
"symfony-tests-dir": "tests",
...
},
几天前,当我将应用程序从 2.8 迁移到 3.4 时,我在使用这些定义时遇到了一些麻烦。
我还必须清除作曲家的缓存。