答案是powershell默认执行策略restricted拦截了npm等全局脚本,只需运行set-executionpolicy remotesigned -scope currentuser -force并重启vscode即可解决,该策略允许本地脚本运行且兼顾安全性。

PowerShell 报“无法加载文件,因为在此系统上禁止运行脚本”
这是 Windows PowerShell 默认执行策略(Restricted)拦截了 npm/pnpm/cnpm 等全局安装的脚本(如 npm.ps1),和 Node.js 本身无关。VSCode 终端默认用 PowerShell,所以一敲 npm install 就报错,但 CMD 或 Git Bash 里完全正常。
别改系统级策略,也别用管理员启动 VSCode——只需对当前用户生效即可:
- 在 VSCode 终端里直接运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force - 关掉所有终端窗口,重启 VSCode(不是 reload window)
- 再运行
get-ExecutionPolicy -Scope CurrentUser,确认输出是RemoteSigned
这个策略允许本地脚本(比如你全局装的 npm)运行,只对从网络下载且未签名的脚本做校验,安全又够用。
VSCode 终端能识别 node -v,但 npm -v 报“找不到命令”
说明 Node.js 二进制路径已加进环境变量,但 npm 的封装脚本(npm.ps1)不在 PATH 搜索范围内,或者被 nvm/fnm 管理器动态切换后没同步到 PowerShell 上下文。
常见于 nvm-windows 或 fnm 用户:
- nvm-windows:确保
terminal.integrated.env.windows设置里 PATH 包含D: vm4w odejs(不是C:Program Files odejs) - fnm:必须在 PowerShell 启动时加载环境变量,需在
$HOMEDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1中添加:fnm env --use-on-cd | Out-String | Invoke-Expression - 验证路径是否生效:
where npm应返回.ps1文件路径;若返回.cmd,说明 PowerShell 没走脚本路径,得检查 profile 是否加载成功
修改了环境变量,VSCode 终端仍不生效
VSCode 启动时会缓存系统环境变量快照,后续手动改的 PATH 不会自动注入已打开的终端进程。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
临时补救(不用重启):
- 在当前 PowerShell 终端中手动追加:
$env:Path += ";D: vm4w odejs"(路径按你实际安装位置替换) - 永久生效必须改 VSCode 设置:
"terminal.integrated.env.windows": { "PATH": "${env:PATH};D:\nvm4w\nodejs" },保存后彻底关闭并重开 VSCode - 注意:反斜杠要双写(
\),否则 JSON 解析失败
别依赖 Windows 系统环境变量面板里的修改——VSCode 不读取运行时更新,只读取启动那一刻的值。
为什么改完策略还是跑不了 pnpm run dev?
pnpm 全局安装后生成的是 pnpm.ps1,它依赖 PowerShell 脚本执行权限,但也受另一个隐性限制:如果 VSCode 终端启动时 PowerShell 还没加载你的 profile(比如用了 fnm env),那即使策略开了,脚本路径也没加进去。
关键检查点:
- 运行
$PROFILE看 profile 文件路径是否存在,内容是否包含环境初始化逻辑 - 在终端里手动执行
& $PROFILE,再试pnpm -v—— 如果这时好了,说明 profile 没自动加载,得确认 VSCode 启动方式或 PowerShell 版本兼容性 - 避免混用不同包管理器的 shell 脚本:比如用 nvm 切版本后,又用 fnm 的 profile,容易冲突
最稳的做法:统一用一个 Node 版本管理器,并确保它的初始化脚本在 PowerShell 启动时无条件执行。profile 加载失败比执行策略更难排查,但它才是很多“明明改了却没用”的真正原因。










