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

时间:2017-07-24 12:33:01

标签: node.js powershell path pscx

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

.\node_modules\.bin

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

修改:正如问题中所述,我希望路径在目录更改时保持更新。这不仅仅是询问如何使用pwd

1 个答案:

答案 0 :(得分:1)

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

例如:

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

或使用PowerShell Community Extensions(PSCX):

Add-PathVariable '.\node_modules\.bin'

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

测试:

$ 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')

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

您可能需要查看how to use package installed locally in node_modules的替代方法。