我可以在Powershell的PATH中包含一个相对于当前目录的文件夹吗?

我运行了大量的节点项目,并且通常有二进制文件位于:

.\node_modules\.bin

…相对于项目文件夹。 我希望能够让PATH总是包含这些目录,如果它们存在的话。 我不想包含其他目录,只是相对于当前目录的目录。 我熟悉PSCX和其他Powershell基础知识中的Add-PathVariable ,但是如何在PATH中包含一个相对于当前目录的文件夹?

编辑 :正如问题中所提到的, 我希望path保持更新为目录更改 。 这不是简单地问如何使用pwd

您可以在Env:PATH中使用相对path,find的二进制文件将会dynamic更新

例如:

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

或者使用PowerShell社区扩展 (PSCX):

 Add-PathVariable '.\node_modules\.bin' 

与使用$(pwd). 没有立即parsing为绝对path,所以PATH总是相对于当前工作目录。

testing这个:

 $ which uuid C:\Users\username\Documents\myapp\node_modules\.bin\uuid.cmd 

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

 $ cd ..\blog\ $ which uuid C:\Users\username\Documents\blog\node_modules\.bin\uuid.cmd 

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

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

要么

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

安全提示 :input命令时,Windows将自动search$env:PATH所有目录,查找具有$env:PATHEXT列出的扩展名之一的文件,并执行find的第一个匹配项。 取决于您放置的searchpath的确切位置. 甚至可能取代系统可执行文件。

您可能需要查看如何使用node_modules本地安装的软件包来提供替代方法。