npm 脚本拦截报错

新版 Node.js(v20+)压缩包里自带了 npm.ps1 / npx.ps1 这个 PowerShell 脚本,老版本 Node 没有这个文件,所以以前不会触发这个签名拦截。
详细拆解
-
旧版 Node早年 node 解压包里面,只有
npm.cmd(给 CMD 用),没有 npm.ps1。PowerShell 敲npm的时候,会自动调用npm.cmd,完全不会触发 PowerShell 脚本安全校验,所以你以前用着没事。 -
Node v20 之后的变化(你现在是 v24)官方新增了
npm.ps1,放在 node 根目录。PowerShell 的规则:优先找同名字的.ps1脚本,优先级高于.cmd。而这个npm.ps1只是简单代理脚本,没有数字签名。Windows 默认安全策略RemoteSigned会拦截没有签名的网络来源 ps1 文件,就报你现在这个错。
重点:RemoteSigned规则含义
- 本地自己新建的 ps1 脚本:允许运行
- 网上下载解压得到的 ps1 脚本:必须带数字签名,否则直接拦截
node 压缩包下载解压来的,所以它判定为 “来自网络”,卡住 npm.ps1
简单总结
✅ 老 node:没有 npm.ps1 → ps 直接跑 npm.cmd → 不报错
✅ 新 node:自带 npm.ps1,ps 优先加载它 → 无数字签名 → 安全拦截报错
- 进入目录:
D:\Path\nodejs\node-v24.21.0-win-x64\ - 找到 2 个文件,重命名备份:
npm.ps1→npm.ps1.baknpx.ps1→npx.ps1.bak
- 全部关闭 VS Code,重新打开
- VSCode 终端测试:输入
npm -v,正常显示版本即成功

浙公网安备 33010602011771号