是否可以在 Powershell 的 PATH 中包含相对于当前目录的文件夹?



我运行了很多节点项目,并且经常将二进制文件位于:

.node_modules.bin

。相对于项目文件夹。我希望能够PATH始终包含这些目录(如果存在(。我不想包含其他目录,只想包含相对于当前目录的目录。我熟悉Add-PathVariable来自 PSCX 和其他 Powershell 基础知识,但我如何在 PATH 中包含相对于当前目录的文件夹?

编辑:如问题中所述,我已经希望路径随着目录的变化而保持更新。这不仅仅是问如何使用pwd.

您可以在 Env:PATH 中使用相对路径,找到的二进制文件将动态更新

例如:

$env:PATH += ';.node_modules.bin'

或者使用 PowerShell Community Extensions (PSCX(:

Add-PathVariable '.node_modules.bin'

与使用$(pwd)不同,.不会立即解析为绝对路径,因此PATH始终相对于当前工作目录。

测试这个:

$ which uuid
C:UsersusernameDocumentsmyappnode_modules.binuuid.cmd

然后更改目录,uuid 现在引用不同目录中的程序:

$ cd ..blog
$ which uuid
C:UsersusernameDocumentsblognode_modules.binuuid.cmd

还可以在用户或系统环境中持久更改PATH

[Environment]::SetEnvironmentVariable(($env:PATH + ';.'), 'User')

[Environment]::SetEnvironmentVariable(($env:PATH + ';.'), 'Machine')

安全说明:输入命令时,Windows 将自动搜索$env:PATH中的所有目录中,以查找具有$env:PATHEXT中列出的扩展名之一的文件,并执行它找到的第一个匹配项。根据您放置的搜索路径中的确切位置,.甚至可能取代系统可执行文件。

您可能想看看如何使用本地安装的包 node_modules 作为替代方法。

最新更新