对于 Laravel 开发,我们经常发现自己输入诸如 ./vendor/bin/pest 之类的命令来运行项目特定的命令。
我们不需要这样做!
为了帮助解决这个问题,我们可以更新我们的 Mac(或 Linux)$PATH 变量。
什么是 $PATH?
$PATH 变量设置了系统在查找要运行的命令时要查找的目录。
例如,我们可以输入 which <cmd> 来查找任何给定命令的路径
$ which git/usr/local/bin/git
我的系统知道在 /usr/local/bin 中查找 git,因为 /usr/local/bin 是我的 $PATH 中设置的一个目录!
您现在可以 echo 出您的路径
# Output the whole pathecho $PATH # For human-readability, split out each# directory into a new line:echo "$PATH" | tr ':' '\n'
PATH 中的相对目录
我们可以编辑我们的 $PATH 变量来添加我们想要的任何目录!
一个非常方便的技巧是在您的 $PATH 变量中设置相对目录。
两个例子是添加 ./vendor/bin 和 ./node_modules/.bin
# In your ~/.zshrc, ~/.bashrc or, ~/.bash_profile or similar# Each directory is separated by a colonPATH=./vendor/bin:./node_modules/.bin:$PATH
在这里,我们将两个新的路径预先添加到现有的 $PATH 变量中。现在,无论我们 cd 到哪个 Laravel 应用程序中,我们都可以运行 pest 并知道我们正在运行 ./vendor/bin/pest,phpunit 来运行 ./vendor/bin/phpunit(以及 ./node_modules/.bin 中任何给定的 Node 命令)。
我们还可以将当前目录 . 设置在我们的 $PATH 中(如果它还没有设置 - 它可能已经设置了)
# In your ~/.zshrc, ~/.bashrc or, ~/.bash_profile or similar# Each directory is separated by a colon# Here we also set the current directory in our PATHPATH=.:./vendor/bin:./node_modules/.bin:$PATH
这样我们就可以输入 artisan 而不是 ./artisan 或 php artisan。
这些是我在 Chipper CI 中设置的,以便用户可以运行 pest 或 phpunit,而无需担心命令在他们的 CI 环境中存在的位置。
说明
顺序在 $PATH 中也很重要。当搜索命令时,会首先搜索较早的目录。系统将使用找到的第一个命令 - 这意味着您可以通过将命令放在 $PATH 中更早的目录中来覆盖系统命令。这就是为什么我们预先将 ./vendor/bin 和 ./node_modules/.bin 添加到 $PATH 中,而不是追加它。
您可以找到命令的所有位置,如下所示
$ which -a git git is /usr/local/bin/gitgit is /usr/bin/gitgit is /usr/local/bin/gitgit is /usr/bin/git
最后,在所有这些情况下,命令应该具有可执行权限才能像这样工作。在创建自己的命令(例如自定义 bash 脚本)时,这一点需要注意。