我怎样才能让 Composer 更喜欢稳定版本,但抓住一些 select 开发版本?
How can I have Composer prefer stable releases, but grab a few select dev releases?
我想做什么
我正在尝试使用 Composer 管理 Drupal 8 及其模块。这是我想要做的:
- 尽可能使用 modules/libraries 的最新稳定版本,除非我明确声明为其他情况。
(为什么?因为 Drupal 模块的稳定版本偶尔会被破坏,但它在 dev
中已修复,所以在这些情况下我只需要 dev
版本,直到发布新版本。 )
这是我的例子 composer.json
:
"require": {
"composer/installers": "^1.0.21@stable",
"wikimedia/composer-merge-plugin": "~1.3@stable",
"cweagans/composer-patches": "~1.0@stable",
"behat/mink-selenium2-driver": "^1.3@stable",
"drupal/drupal-extension": "^3.1@stable",
"drupal/bootstrap": "8.3.*@dev",
"drupal/address": ">=8.1.0-beta2@beta",
"drupal/advagg": ">=8.2.0-beta2@beta",
},
"replace": {
"drupal/core": "~8.0"
},
"minimum-stability": "dev",
"prefer-stable": true,
我想要Bootstrap的开发版本("drupal/bootstrap": "8.3.*@dev"
),但是因为我设置了prefer-stable: true
,所以我得到的是最新的Bootstrap alpha,而不是开发版本发布。
如果我设置 prefer-stable: false
,那么所有依赖项都会切换到开发版本(Symfony、Twig 等)。
我read this article on Composer versioning,但是我找不到问题的解决方案。
编辑:请注意,此 composer.json
需要 Drupal packagist 存储库:
"repositories": [
{
"type": "composer",
"url": "https://packagist.drupal-composer.org"
}
],
这里是完整的 composer.json
:
{
"name": "drupal/drupal",
"description": "Drupal is an open source content management platform powering millions of websites and applications.",
"type": "project",
"license": "GPL-2.0+",
"version": "8.0.3",
"repositories": [
{
"type": "composer",
"url": "https://packagist.drupal-composer.org"
}
],
"require": {
"composer/installers": "^1.0.21",
"wikimedia/composer-merge-plugin": "~1.3",
"cweagans/composer-patches": "~1.0",
"behat/mink-selenium2-driver": "^1.3",
"drupal/drupal-extension": "^3.1",
"drupal/address": "8.1.0-beta2",
"drupal/advagg": "8.2.0-beta2",
"drupal/bootstrap": "8.3.*@dev"
},
"replace": {
"drupal/core": "~8.0"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"preferred-install": "dist",
"autoloader-suffix": "Drupal8"
},
"extra": {
"_readme": [
"By default Drupal loads the autoloader from ./vendor/autoload.php.",
"To change the autoloader you can edit ./autoload.php."
],
"merge-plugin": {
"include": [
"core/composer.json"
],
"recurse": false,
"replace": false,
"merge-extra": false
},
"patches": {
"drupal/smtp": {
"Remove install config" : "https://www.drupal.org/files/issues/remove_install-2651434-2.patch"
}
}
},
"autoload": {
"psr-4": {
"Drupal\Core\Composer\": "core/lib/Drupal/Core/Composer"
}
},
"scripts": {
"pre-autoload-dump": "Drupal\Core\Composer\Composer::preAutoloadDump",
"post-autoload-dump": "Drupal\Core\Composer\Composer::ensureHtaccess",
"post-package-install": "Drupal\Core\Composer\Composer::vendorTestCodeCleanup",
"post-package-update": "Drupal\Core\Composer\Composer::vendorTestCodeCleanup"
}
}
首先,您给出的composer.json
示例无效:
- 不允许在节的最后一行使用逗号。
在 Packagist 找不到 drupal/bootstrap
、drupal/address
和 drupal/advagg
。
实现如下
Use the most recent stable version of modules/libraries whenever possible, except in a few cases where I explicitly declare otherwise.
你只需要设置 "minimum-stability": "stable"
这意味着只获取稳定版本。并在您提到的少数情况下使用 @dev
标志。在这种情况下不需要 prefer-stable
。
下面以composer.json
为例。这将只安装列出的软件包的稳定版本:
{
"require": {
"composer/installers": "^1.0.21",
"wikimedia/composer-merge-plugin": "~1.3",
"cweagans/composer-patches": "~1.0",
"behat/mink-selenium2-driver": "^1.3",
"drupal/drupal-extension": "^3.1",
},
"minimum-stability": "stable"
}
如果您现在将 require
部分的第一行从
"composer/installers": "^1.0.21",
到
"composer/installers": "^1.0.21@dev",
它将只安装除 composer/installers
之外的所有列出的软件包的稳定版本。因为 @dev
标志覆盖了 "minimum-stability": "stable"
这将只下载这个包的开发版本。
Drupal Packagist 的另一个最小示例:
{
"require": {
"composer/installers": "^1.0.21",
"wikimedia/composer-merge-plugin": "~1.3",
"cweagans/composer-patches": "~1.0",
"behat/mink-selenium2-driver": "^1.3",
"drupal/drupal-extension": "^3.1",
"drupal/bootstrap": "8.3.*@dev"
},
"replace": {
"drupal/core": "~8.0"
},
"minimum-stability": "stable",
"repositories": [
{
"type": "composer",
"url": "http://packagist.drupal-composer.org"
}
]
}
我只用了上面的 composer.json
和 运行 composer install
的空文件夹。 (对于您的项目,您可以完全删除 vendor/
文件夹并删除 运行 composer install
之前的 composer.lock
。之前进行备份!)。
它安装了 drupal/bootstrap
的最新开发版本,您可以从下面的控制台输出中看到:
- Installing drupal/bootstrap (dev-8.x-3.x 6a37bf5)
Cloning 6a37bf5977c54dde4fe58f40118a8c71ce7e145a
如果您将已安装版本的哈希值 6a37bf5977c54dde4fe58f40118a8c71ce7e145a
与 http://cgit.drupalcode.org/bootstrap/log/ you can see that it installed the latest version (At this time Issue #2672514 by neardark: update documentation
处的源代码进行比较。
我想做什么
我正在尝试使用 Composer 管理 Drupal 8 及其模块。这是我想要做的:
- 尽可能使用 modules/libraries 的最新稳定版本,除非我明确声明为其他情况。
(为什么?因为 Drupal 模块的稳定版本偶尔会被破坏,但它在 dev
中已修复,所以在这些情况下我只需要 dev
版本,直到发布新版本。 )
这是我的例子 composer.json
:
"require": {
"composer/installers": "^1.0.21@stable",
"wikimedia/composer-merge-plugin": "~1.3@stable",
"cweagans/composer-patches": "~1.0@stable",
"behat/mink-selenium2-driver": "^1.3@stable",
"drupal/drupal-extension": "^3.1@stable",
"drupal/bootstrap": "8.3.*@dev",
"drupal/address": ">=8.1.0-beta2@beta",
"drupal/advagg": ">=8.2.0-beta2@beta",
},
"replace": {
"drupal/core": "~8.0"
},
"minimum-stability": "dev",
"prefer-stable": true,
我想要Bootstrap的开发版本("drupal/bootstrap": "8.3.*@dev"
),但是因为我设置了prefer-stable: true
,所以我得到的是最新的Bootstrap alpha,而不是开发版本发布。
如果我设置 prefer-stable: false
,那么所有依赖项都会切换到开发版本(Symfony、Twig 等)。
我read this article on Composer versioning,但是我找不到问题的解决方案。
编辑:请注意,此 composer.json
需要 Drupal packagist 存储库:
"repositories": [
{
"type": "composer",
"url": "https://packagist.drupal-composer.org"
}
],
这里是完整的 composer.json
:
{
"name": "drupal/drupal",
"description": "Drupal is an open source content management platform powering millions of websites and applications.",
"type": "project",
"license": "GPL-2.0+",
"version": "8.0.3",
"repositories": [
{
"type": "composer",
"url": "https://packagist.drupal-composer.org"
}
],
"require": {
"composer/installers": "^1.0.21",
"wikimedia/composer-merge-plugin": "~1.3",
"cweagans/composer-patches": "~1.0",
"behat/mink-selenium2-driver": "^1.3",
"drupal/drupal-extension": "^3.1",
"drupal/address": "8.1.0-beta2",
"drupal/advagg": "8.2.0-beta2",
"drupal/bootstrap": "8.3.*@dev"
},
"replace": {
"drupal/core": "~8.0"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"preferred-install": "dist",
"autoloader-suffix": "Drupal8"
},
"extra": {
"_readme": [
"By default Drupal loads the autoloader from ./vendor/autoload.php.",
"To change the autoloader you can edit ./autoload.php."
],
"merge-plugin": {
"include": [
"core/composer.json"
],
"recurse": false,
"replace": false,
"merge-extra": false
},
"patches": {
"drupal/smtp": {
"Remove install config" : "https://www.drupal.org/files/issues/remove_install-2651434-2.patch"
}
}
},
"autoload": {
"psr-4": {
"Drupal\Core\Composer\": "core/lib/Drupal/Core/Composer"
}
},
"scripts": {
"pre-autoload-dump": "Drupal\Core\Composer\Composer::preAutoloadDump",
"post-autoload-dump": "Drupal\Core\Composer\Composer::ensureHtaccess",
"post-package-install": "Drupal\Core\Composer\Composer::vendorTestCodeCleanup",
"post-package-update": "Drupal\Core\Composer\Composer::vendorTestCodeCleanup"
}
}
首先,您给出的composer.json
示例无效:
- 不允许在节的最后一行使用逗号。 在 Packagist 找不到
drupal/bootstrap
、drupal/address
和drupal/advagg
。
实现如下
Use the most recent stable version of modules/libraries whenever possible, except in a few cases where I explicitly declare otherwise.
你只需要设置 "minimum-stability": "stable"
这意味着只获取稳定版本。并在您提到的少数情况下使用 @dev
标志。在这种情况下不需要 prefer-stable
。
下面以composer.json
为例。这将只安装列出的软件包的稳定版本:
{
"require": {
"composer/installers": "^1.0.21",
"wikimedia/composer-merge-plugin": "~1.3",
"cweagans/composer-patches": "~1.0",
"behat/mink-selenium2-driver": "^1.3",
"drupal/drupal-extension": "^3.1",
},
"minimum-stability": "stable"
}
如果您现在将 require
部分的第一行从
"composer/installers": "^1.0.21",
到
"composer/installers": "^1.0.21@dev",
它将只安装除 composer/installers
之外的所有列出的软件包的稳定版本。因为 @dev
标志覆盖了 "minimum-stability": "stable"
这将只下载这个包的开发版本。
Drupal Packagist 的另一个最小示例:
{
"require": {
"composer/installers": "^1.0.21",
"wikimedia/composer-merge-plugin": "~1.3",
"cweagans/composer-patches": "~1.0",
"behat/mink-selenium2-driver": "^1.3",
"drupal/drupal-extension": "^3.1",
"drupal/bootstrap": "8.3.*@dev"
},
"replace": {
"drupal/core": "~8.0"
},
"minimum-stability": "stable",
"repositories": [
{
"type": "composer",
"url": "http://packagist.drupal-composer.org"
}
]
}
我只用了上面的 composer.json
和 运行 composer install
的空文件夹。 (对于您的项目,您可以完全删除 vendor/
文件夹并删除 运行 composer install
之前的 composer.lock
。之前进行备份!)。
它安装了 drupal/bootstrap
的最新开发版本,您可以从下面的控制台输出中看到:
- Installing drupal/bootstrap (dev-8.x-3.x 6a37bf5) Cloning 6a37bf5977c54dde4fe58f40118a8c71ce7e145a
如果您将已安装版本的哈希值 6a37bf5977c54dde4fe58f40118a8c71ce7e145a
与 http://cgit.drupalcode.org/bootstrap/log/ you can see that it installed the latest version (At this time Issue #2672514 by neardark: update documentation
处的源代码进行比较。