如何在Powershell中无需前置`node`命令直接执行Node.js文件
无需添加node前缀直接执行Node.js脚本的操作方法
前提验证
先确认Node.js已加入系统PATH:打开任意Powershell窗口执行node -v,能正常输出版本号即为符合要求,若未输出需先将Node.js安装路径加入系统环境变量PATH。
永久配置方案(全局生效,推荐)
一次配置后所有.mjs/.js文件都支持直接运行,操作步骤如下:
- 打开管理员权限的Powershell窗口,执行以下命令绑定Node.js程序标识,注意替换命令中的node.exe路径为你本地的实际安装路径(默认安装路径为
C:\Program Files\nodejs\node.exe,若使用nvm等版本管理工具安装需对应修改路径):ftype NodeJS.File="C:\Program Files\nodejs\node.exe" "%1" %* - 执行命令关联对应后缀到Node.js标识,如果你需要.js和.mjs都支持直接执行,两条命令都运行即可:
# 关联.mjs后缀 assoc .mjs=NodeJS.File # 可选:关联.js后缀 assoc .js=NodeJS.File - (可选)配置PATHEXT环境变量,实现无需输入后缀即可执行:
右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,在系统变量中找到PATHEXT,编辑添加.MJS;.JS,保存后关闭所有设置窗口。 - 重启所有Powershell窗口生效,之后就可以直接输入
.\script.mjs执行脚本,传递参数也和原来加node前缀时完全一致,示例:.\script.mjs --param1 test --param2 123。
临时配置方案(仅当前Powershell会话生效)
如果不想修改全局系统配置,可以在当前需要使用的Powershell窗口中执行以下命令,配置完成后当前窗口即可直接运行.mjs文件,关闭窗口后配置自动失效:
$env:PATHEXT += ";.MJS" Register-ObjectEvent -InputObject $ExecutionContext.SessionState.InvokeCommand -EventName CommandNotFound -Action { param($sender, $e) if ($e.CommandName -match '\.mjs$') { $path = Resolve-Path $e.CommandName -ErrorAction SilentlyContinue if ($path) { $e.CommandLookupEventArgs.CommandScript = { & node $path @args }.GetNewClosure() } } } | Out-Null
内容的提问来源于stack exchange,提问作者Fred Hors
相关产品推荐
相关产品推荐

