pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/runoob-coder/runoob-coder/commit/402b54c8d8847e8a11179adeb747236ddc306654

/> docs(composer): 添加供应商二进制文件相关文档 · runoob-coder/runoob-coder@402b54c · GitHub
Skip to content

Commit 402b54c

Browse files
committed
docs(composer): 添加供应商二进制文件相关文档
- 在侧边栏新增“供应商二进制文件和 vendor/bin 目录”链接 - 新增文章详细介绍如何定义和使用 Composer 二进制文件 - 更新 Composer 主页描述信息,明确其依赖管理功能 - 在常见问题部分添加指向新文档的导航链接 - 补充关于 bin-dir 配置和 COMPOSER_BIN_DIR 环境变量的说明 - 增加 Windows 兼容性及 .bat 文件处理的相关内容 - 添加 Composer 2.2+ 中自动加载器和 bin 目录定位方法 - 提供自定义 bin 目录位置的配置示例与最佳实践指导
1 parent 3cbf1cf commit 402b54c

File tree

3 files changed

+181
-2
lines changed

3 files changed

+181
-2
lines changed

.vitepress/sidebar/php.mts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ export function sidebarPHPComposer(): DefaultTheme.SidebarItem[] {
7373
text: '仓库优先级',
7474
link: 'repository-priorities'
7575
},
76+
{
77+
text: '供应商二进制文件和 vendor/bin 目录',
78+
link: 'vendor-binaries'
79+
},
7680
{
7781
text: '版本与约束',
7882
link: 'versions'
@@ -87,13 +91,23 @@ export function sidebarPHPComposer(): DefaultTheme.SidebarItem[] {
8791
}
8892
]
8993
},
94+
{
95+
text: 'PHP PSR标准规范',
96+
base: '/php/php-fig/psr/',
97+
link: 'index',
98+
},
99+
{
100+
text: 'PHP 最佳实践',
101+
base: '/php/php-best-practices/',
102+
link: 'index',
103+
}
90104
]
91105
}
92106

93107
export function sidebarPSR(): DefaultTheme.SidebarItem[] {
94108
return [
95109
{
96-
text: 'PSR标准规范',
110+
text: 'PSR 标准规范',
97111
base: '/php/php-fig/psr/',
98112
link: 'index',
99113
collapsed: false,
@@ -104,6 +118,16 @@ export function sidebarPSR(): DefaultTheme.SidebarItem[] {
104118
},
105119
]
106120
},
121+
{
122+
text: 'Composer',
123+
base: '/php/composer/',
124+
link: 'index',
125+
},
126+
{
127+
text: 'PHP 最佳实践',
128+
base: '/php/php-best-practices/',
129+
link: 'index',
130+
}
107131
]
108132
}
109133

@@ -202,5 +226,15 @@ export function sidebarPhpBestPractices(): DefaultTheme.SidebarItem[] {
202226

203227
]
204228
},
229+
{
230+
text: 'PHP PSR标准规范',
231+
base: '/php/php-fig/psr/',
232+
link: 'index',
233+
},
234+
{
235+
text: 'Composer',
236+
base: '/php/composer/',
237+
link: 'index',
238+
}
205239
]
206240
}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
---
2+
titleTemplate: 相关文章 | Composer中文文档 - PHP 的依赖管理器 | PHP | noob-coder | 菜鸟码农
3+
head:
4+
- - meta
5+
- name: keywords
6+
content: bin-dir,COMPOSER_BIN_DIR,.bat,COMPOSER_RUNTIME_BIN_DIR,composer_bin_dir,composer-runtime-api,composer_autoload_path,composer install,代理文件,Windows/WSL,vendor,二进制文件,bin,composer.json,命令行脚本,构建,编译脚本,供应商二进制文件,composer.json,bin,供应商二进制文件,vendor/bin,Composer,依赖管理器,PHP,libraries,dependency,noob-coder,菜鸟码农
7+
- - meta
8+
- name: description
9+
content: 暴露包中的命令行脚本
10+
---
11+
12+
# 供应商二进制文件和 `vendor/bin` 目录
13+
14+
## 什么是供应商二进制文件?
15+
16+
任何 Composer 包希望传递给安装该包的用户的命令行脚本都应该被列为供应商二进制文件。
17+
18+
如果一个包包含其他不需要包用户使用的脚本(如构建或编译脚本),这些代码不应列为供应商二进制文件。
19+
20+
## 如何定义?
21+
22+
通过在项目的 `composer.json` 中添加 `bin` 键来定义。它被指定为文件数组,因此可以为任何给定项目添加多个二进制文件。
23+
24+
```json
25+
{
26+
"bin": ["bin/my-script", "bin/my-other-script"]
27+
}
28+
```
29+
30+
## 在 composer.json 中定义供应商二进制文件的作用是什么?
31+
32+
它指示 Composer 将包的二进制文件安装到 `vendor/bin` 目录中,适用于任何**依赖**于该项目的项目。
33+
34+
这是一种便捷的方式,可以暴露那些否则会被隐藏在 `vendor/` 目录深处的有用脚本。
35+
36+
## 当对定义了供应商二进制文件的 composer.json 运行 Composer 时会发生什么?
37+
38+
对于包直接定义的二进制文件,不会发生任何事情。
39+
40+
## 当对具有列出供应商二进制文件依赖项的 composer.json 运行 Composer 时会发生什么?
41+
42+
Composer 会查找所有依赖项中定义的二进制文件。从每个依赖项的二进制文件创建一个代理文件(在 Windows/WSL 上是两个)到 `vendor/bin`
43+
44+
假设包 `my-vendor/project-a` 的二进制文件设置如下:
45+
46+
```json
47+
{
48+
"name": "my-vendor/project-a",
49+
"bin": ["bin/project-a-bin"]
50+
}
51+
```
52+
53+
54+
对此 `composer.json` 运行 `composer install` 不会对 `bin/project-a-bin` 做任何处理。
55+
56+
假设项目 `my-vendor/project-b` 的依赖设置如下:
57+
58+
```json
59+
{
60+
"name": "my-vendor/project-b",
61+
"require": {
62+
"my-vendor/project-a": "*"
63+
}
64+
}
65+
```
66+
67+
对此 `composer.json` 运行 `composer install` 会查看 project-a 的所有二进制文件并将它们安装到 `vendor/bin`
68+
69+
在这种情况下,Composer 会将 `vendor/my-vendor/project-a/bin/project-a-bin` 作为 `vendor/bin/project-a-bin` 提供使用。
70+
71+
## 从二进制文件中查找 Composer 自动加载器 {#finding-the-composer-autoloader-from-a-binary}
72+
73+
从 Composer 2.2 版本开始,bin 代理文件定义了一个新的 `$_composer_autoload_path` 全局变量,这样当你的二进制文件被执行时,它可以使用这个变量轻松定位项目的自动加载器。
74+
75+
但是,当运行由根包自身定义的二进制文件时,这个全局变量将不可用,因此你需要设置一个备用方案。
76+
77+
例如,可以这样写:
78+
79+
```php
80+
<?php
81+
82+
include $_composer_autoload_path ?? __DIR__ . '/../vendor/autoload.php';
83+
```
84+
85+
如果你想在包中依赖此功能,应该同时要求 `"composer-runtime-api": "^2.2"`,以确保包能够使用支持该功能的 Composer 版本进行安装。
86+
87+
## 从二进制文件中查找 Composer bin 目录 {#finding-the-composer-bin-dir-from-a-binary}
88+
89+
从 Composer 2.2.2 版本开始,bin 代理文件定义了一个新的 `$_composer_bin_dir` 全局变量,这样当你的二进制文件被执行时,它可以使用这个变量轻松定位项目的 Composer bin 目录。
90+
91+
对于非 PHP 二进制文件,从 Composer 2.2.6 版本开始,bin 代理会设置一个 `COMPOSER_RUNTIME_BIN_DIR` 环境变量。
92+
93+
但是,当运行由根包自身定义的二进制文件时,这个全局变量将不可用,因此你需要设置一个备用方案。
94+
95+
例如,可以这样写:
96+
97+
```php
98+
<?php
99+
100+
$binDir = $_composer_bin_dir ?? __DIR__ . '/../vendor/bin';
101+
```
102+
103+
```php
104+
#!/bin/bash
105+
106+
if [[ -z "$COMPOSER_RUNTIME_BIN_DIR" ]]; then
107+
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
108+
else
109+
BIN_DIR="$COMPOSER_RUNTIME_BIN_DIR"
110+
fi
111+
```
112+
113+
如果你想在包中依赖此功能,应该同时要求 `"composer-runtime-api": "^2.2.2"`,以确保包能够使用支持该功能的 Composer 版本进行安装。
114+
115+
## Windows 和 .bat 文件怎么办?
116+
117+
完全由 Composer 管理的包不需要包含任何用于 Windows 兼容性的 `.bat` 文件。Composer 在 Windows 环境中运行时会以特殊方式处理二进制文件的安装:
118+
119+
- 自动生成一个 `.bat` 文件来引用二进制文件;
120+
- 同时生成一个与二进制文件同名的 Unix 风格代理文件,这对 WSL、Linux 虚拟机等环境很有用。
121+
122+
需要支持可能不包含 Composer 的工作流程的包可以维护自定义的 `.bat` 文件。在这种情况下,包不应该将 `.bat` 文件列为二进制文件,因为它是不需要的。
123+
124+
## 供应商二进制文件能否安装到 `vendor/bin` 以外的其他位置?
125+
126+
是的,有两种方式可以指定替代的供应商二进制文件位置:
127+
128+
1.`composer.json` 中设置 `bin-dir` 配置选项
129+
2. 设置环境变量 `COMPOSER_BIN_DIR`
130+
131+
前者的示例如下:
132+
133+
```json
134+
{
135+
"config": {
136+
"bin-dir": "scripts"
137+
}
138+
}
139+
```
140+
141+
对此 `composer.json` 运行 `composer install` 将导致所有供应商二进制文件被安装到 `scripts/` 而不是 `vendor/bin/`
142+
143+
你可以将 `bin-dir` 设置为 `./` 来将二进制文件放在项目根目录中。

php/composer/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ head:
1010
hero:
1111
name: "Composer"
1212
text: "PHP 的依赖管理器"
13-
tagline: ""
13+
tagline: "它允许你声明项目所依赖的库,并且会为你管理(安装/更新)这些库。"
1414
image:
1515
src: /php/composer/logo.avif
1616
alt: Composer
@@ -83,6 +83,8 @@ features:
8383
- [Composer 平台依赖](./articles/composer-platform-dependencies.md)
8484
- [设置和使用自定义安装器](./articles/custom-installers.md)
8585
- [仓库优先级](./articles/repository-priorities.md)
86+
- [供应商二进制文件和 vendor/bin 目录](./articles/vendor-binaries.md)
8687
- [版本与约束](./articles/versions.md)
8788

8889
## 常见问题
90+

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy