vscode中npm报“.ps1无法加载”是powershell执行策略限制所致,非npm故障;应设currentuser级remotesigned策略或改用command prompt/git bash终端。

VSCode 里 npm 报错 “xxx.ps1 cannot be loaded because running scripts is disabled”,不是 npm 坏了,是 PowerShell 拦住了它——改执行策略或换终端就能解,不用重装 Node 或开管理员模式。
PowerShell 执行策略为什么拦 npm
npm 全局安装的 CLI 工具(比如 cnpm、vercel、pnpm)在 Windows 上会生成 .ps1 脚本入口。PowerShell 默认策略是 Restricted,连本地 .ps1 都不放行,和文件权限、杀毒软件无关。
常见错误信息长这样:cnpm : 无法加载文件 C:\Users\XXX\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本
- 执行
Get-ExecutionPolicy返回Restricted就是它 - 这个限制只影响 PowerShell,不影响 CMD 或 Git Bash
-
RemoteSigned是安全与可用的平衡点:本地脚本直行,远程脚本仍需签名
改 CurrentUser 级别的执行策略(推荐)
别用管理员 PowerShell 改 LocalMachine,容易污染全系统;只对当前用户生效更干净。
在 VSCode 终端里直接运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
然后关掉当前终端,再按 Ctrl+Shift+` 新开一个——不用重启 VSCode。
- 验证是否生效:
Get-ExecutionPolicy -Scope CurrentUser应返回RemoteSigned - 如果误用了
-Scope LocalMachine,得用管理员 PowerShell 运行Set-ExecutionPolicy Undefined -Scope LocalMachine才能覆盖 - 加
-Force可跳过 Y/N 提示,适合批量配置
不改策略?换终端更省事
VSCode 终端类型不是“默认记住上次选的”,而是按配置启动。想彻底绕过 PowerShell 策略,就换壳。
快捷操作:Ctrl+Shift+P → 输入 Terminal: Select Default Profile → 回车 → 选 Command Prompt 或 Git Bash
- 选
Command Prompt后,npm走的是npm.cmd,天然绕过.ps1限制 - 选
Git Bash后,命令行为接近 Linux,cnpm install直接跑,不用额外配置 - 如果选了 WSL 但没启用,终端会卡在“正在启动…”——先确认
wsl --list --verbose有运行中的发行版
为什么改了终端类型还是打开 PowerShell
VSCode 不会“记住你上次点了哪个终端”,它每次新建终端都严格读取 settings.json 里的 terminal.integrated.defaultProfile.windows 配置。
手动检查或修复方法:
"terminal.integrated.defaultProfile.windows": "Command Prompt"
- 这个配置写在用户 settings(不是工作区),影响所有项目
- 如果值是
"PowerShell"却希望默认用 CMD,删掉这行或改成上面那样即可 - 改完不用重启 VSCode,新开终端立即生效
真正容易被忽略的是:PowerShell 的 .ps1 限制只针对脚本入口,而 npm.cmd 和 npm(无后缀)本质是不同文件——哪怕路径一样,执行链路也完全不同。别在终端里反复试 npm,先 where npm 看它到底调了哪个文件。











