我试图正确地使用composer来安装一个名为nikic/php-parser的库。
感谢克莱夫的有益评论,我现在明白了,当一个Drupal 7模块附带一个composer.json文件时,该文件应该被合并到一个统一的composer.json-file中,从那时起,事情将或多或少地自动处理。
在Composer Manager项目页面上的说明中也提到了事情应该是这样的:
Composer Manager允许每个贡献模块随它自己的composer.json文件一起发布,并列出特定于模块的需求。然后将所有找到的模块的需求合并到统一的composer.json文件中。这会导致在所有模块之间共享一个供应商/目录,从而防止代码重复和版本不匹配。我的重点。
我用来测试的Drupal站点是Drupal 7的新安装,组织起来的Drupal 7通常是在使用drush (drush si standard)安装它时组织起来的。
Composer Manager包包含具有以下要求的composer.json:
"require": {
"php": ">=5.3.0",
"nikic/php-parser": "^4.2"
}我将Drupal变量composer_manager_vendor_dir设置为sites/all/vendor,统一composer.json的composer目录设置为/sites/default/files/composer。
合并后的composer.json当前包含:
{
"require": {
"symfony/yaml": ">=3.1",
"php": ">=5.3.0"
},
"config": {
"autoloader-suffix": "ComposerManager",
"vendor-dir": "../../../all/vendor"
},
"prefer-stable": true
}也就是说,它不包括对nikic/php-parser的要求。上述项目的说明似乎意味着它将以某种方式自动合并。在我的试验场还没有发生这种事。
听了克莱夫的另一个提示,我跑了:
drush composer-manager install这导致:
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
- Installing symfony/yaml (v3.1.0)
Downloading: 100%
Generating autoload files也就是说,它完成了统一composer.json所需的更新。但是它没有注意到模块目录中的composer.json。
试着:
drush composer-manager update..。没有解决这个问题。
一定有很明显的事情我错过了。
如何将模块的composer.json中的需求合并到统一的composer.json中(除了将其拼接到“手工”中)?
发布于 2019-02-14 14:05:27
我想我已经搞清楚了。
这应该是自动发生的。如果使用Drupal 7下的drush启用了模块,则会启用该模块。如果使用其他方式启用模块,则可能不会发生这种情况。
如果根composer.json由于某种原因没有满足特定模块的要求,则使用drush禁用,然后再重新启用模块修复问题。例如:
drush dis composer_manager -y
drush en composer_manager -y这似乎是所需的全部。
应该强调的是,这只适用于Drupal 7,Drupal 8是完全不同的野兽。
https://drupal.stackexchange.com/questions/276479
复制相似问题