PowerShell 运行 npm 报“禁止运行脚本”:为什么改 Execution Policy 就好了?
文章类型:Vue
发布者:hp
发布时间:2026-04-17
npm 报“禁止运行脚本”:为什么改 Execution Policy 就好了?在 Windows 上用 PowerShell 启动前端项目时,很多人会遇到类似报错:
npm : 无法加载文件 ...\npm.ps1,因为在此系统上禁止运行脚本PSSecurityException / UnauthorizedAccess
表面上看是 npm 出问题了,但核心原因其实是 PowerShell 的脚本执行策略(Execution Policy) 把 npm 的入口脚本拦下来了。
下面用一篇“讲清楚原理”的方式解释:为什么把策略改成 RemoteSigned 就能解决。
npm,其实 PowerShell 在跑 npm.ps1当你在 PowerShell 输入:
npm run devPowerShell 会在 PATH 里找名为 npm 的可执行入口。在 Node.js 的 Windows 安装中,通常会同时提供几种入口文件,比如:
npm.ps1:给 PowerShell 用的脚本入口npm.cmd:给 cmd.exe 用的批处理入口 -(以及 node/npm 的其它配套文件)你的报错里明确点名了:
C:\Program Files\nodejs\npm.ps1所以问题不是项目、不是 package.json、也不是 npm run dev 命令本身,而是:PowerShell 不允许执行这个 .ps1 脚本文件。
Execution Policy(执行策略)是 PowerShell 用来控制“脚本能不能运行”的一层安全机制。
它不是 Windows 的“权限系统”(不是 ACL、也不是管理员权限那套),更像是 PowerShell 自己的“安全开关”:
.ps1 脚本会被直接阻止执行npm.ps1 这种入口脚本也会被拦PSSecurityExceptionRemoteSigned 为什么能解决?当你执行:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned你做的事情是:把“脚本执行规则”设置为 RemoteSigned,它的含义可以简单理解为:
而 npm.ps1 是你在本机安装 Node.js 时放到磁盘上的脚本,一般会被视为“本地脚本”,因此在 RemoteSigned 下就能执行。
所以链路就恢复了:
npm run dev → PowerShell 能执行 npm.ps1 → npm 真正启动 → dev 脚本正常运行。
-Scope CurrentUser?-Scope CurrentUser 的意思是:只改当前 Windows 用户的策略,不影响全系统其他用户,通常也不需要管理员权限。
这是一种“影响面更小”的做法,适合开发环境。
在 PowerShell 里执行:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned出现提示时输入 Y 确认。
然后关闭当前终端,重新打开 PowerShell,再运行:
npm run dev你也可以检查一下各个 scope 的策略值:
Get-ExecutionPolicy -List有。如果你不想动 Execution Policy,可以绕过 .ps1,直接走 cmd 入口:
npm.cmd run dev这是因为 .cmd 不受 PowerShell 的脚本执行策略限制。
但如果你日常在 PowerShell 下开发,设置一次 RemoteSigned 往往更省事。
npm.ps1RemoteSigned 后:允许执行本机脚本,npm.ps1 不再被拦截CurrentUser:只影响当前用户,风险和影响面更小如果你愿意,把你 Get-ExecutionPolicy -List 的输出贴一下,我也可以帮你确认当前到底是哪个 scope 在“压住”策略(有时会被更高优先级的策略覆盖)。
暂无评论,快来发表第一条评论吧~