我刚刚安装了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
的命令,value是命令" type" (在这种情况下,它的Symfony' s)。由于未在Composer网站上记录,我认为它不是法律定义,但它有效,我的问题是Composer如何知道如何执行这些命令? Composer如何知道symfony-cmd
是什么?
答案 0 :(得分:0)
我猜它使用extra
composer.json
配置
"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时,我对这些定义有些麻烦。
我还必须清除作曲家的缓存。
答案 1 :(得分:0)
就像Cerad所说的那样。 auto-script
由Symfony / Flex解析,命令的“右侧”:可执行对由this switch-case处理。
switch ($type) {
case 'symfony-cmd':
return $this->expandSymfonyCmd($cmd);
case 'php-script':
return $this->expandPhpScript($cmd);
case 'script':
return $cmd;
由于Composer文档是Symfony特有的,因此无法对此说一句话。
个人不喜欢在composer.json根级别将标准Composer部分与自定义部分混合在一起。它只是使我感到困惑,并把我吸引到无声的Composer文档中。
同样,命名本身auto-script
应该更好。诸如flex-script
之类的魔术性更强的东西。