"composer.lock" 没有显示确切的版本
"composer.lock" does not show the exact version
根据 composer documentation,composer.lock
文件应始终记录项目中安装的包的确切版本。
但是,有时我会看到 composer.lock
中的一些软件包没有确切的版本号,而是有一个范围值,例如 "^7.0 || ^8.0"
.
这是什么意思?
您可能没有阅读已安装包的版本,它确实被指定为一个离散版本(例如 4.1.5
,没有范围,只是一个特定的版本限制),但其中一个的要求安装包。
如果您正在查看 packages
的内容,在 composer.lock
中,只有根包具有独立的版本号。例如:
{
"_readme": "foo bar",
"content-hash": "1098098s908019foobar",
"packages": [
{
"name": "somevendor/somepackage",
"version": "1.2.3" // <-- specific version, no range
// etc
}
]
}
但是每个包的每个包都包含 require
和 require-dev
部分(除其他外)。因此,如果您继续向下钻取,您会看到如下内容:
{
"name": "somevendor/somepackage",
"version": "1.2.3" <-- specific version, no range
"source": {
"type": "git",
"url": "https://github.com/somevendor/somepackage.git",
"reference": "a035d3d2de85f762233aedbc6522f22ee29e5252"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/somevendor/somepackage/zipball/a035d3d2de85f762233aedbc6522f22ee29e5252",
"reference": "a035d3d2de85f762233aedbc6522f22ee29e5252",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0" // <-- like here
}
}
}
等等
composer 在 installing/updating 新包时使用该信息,因此它不需要每次都再次遍历所有包的 composer.json
文件。
但是每个 安装的 软件包的特定版本号在 composer.lock
上正确声明。
根据 composer documentation,composer.lock
文件应始终记录项目中安装的包的确切版本。
但是,有时我会看到 composer.lock
中的一些软件包没有确切的版本号,而是有一个范围值,例如 "^7.0 || ^8.0"
.
这是什么意思?
您可能没有阅读已安装包的版本,它确实被指定为一个离散版本(例如 4.1.5
,没有范围,只是一个特定的版本限制),但其中一个的要求安装包。
如果您正在查看 packages
的内容,在 composer.lock
中,只有根包具有独立的版本号。例如:
{
"_readme": "foo bar",
"content-hash": "1098098s908019foobar",
"packages": [
{
"name": "somevendor/somepackage",
"version": "1.2.3" // <-- specific version, no range
// etc
}
]
}
但是每个包的每个包都包含 require
和 require-dev
部分(除其他外)。因此,如果您继续向下钻取,您会看到如下内容:
{
"name": "somevendor/somepackage",
"version": "1.2.3" <-- specific version, no range
"source": {
"type": "git",
"url": "https://github.com/somevendor/somepackage.git",
"reference": "a035d3d2de85f762233aedbc6522f22ee29e5252"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/somevendor/somepackage/zipball/a035d3d2de85f762233aedbc6522f22ee29e5252",
"reference": "a035d3d2de85f762233aedbc6522f22ee29e5252",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0" // <-- like here
}
}
}
等等
composer 在 installing/updating 新包时使用该信息,因此它不需要每次都再次遍历所有包的 composer.json
文件。
但是每个 安装的 软件包的特定版本号在 composer.lock
上正确声明。