npm 脚本拦截报错

image

 新版 Node.js(v20+)压缩包里自带了 npm.ps1 / npx.ps1 这个 PowerShell 脚本,老版本 Node 没有这个文件,所以以前不会触发这个签名拦截。

详细拆解

  1. 旧版 Node
     
    早年 node 解压包里面,只有 npm.cmd(给 CMD 用),没有 npm.ps1。
     
    PowerShell 敲 npm 的时候,会自动调用 npm.cmd,完全不会触发 PowerShell 脚本安全校验,所以你以前用着没事。
  2. 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.bak
    • npx.ps1 → npx.ps1.bak
  • 全部关闭 VS Code,重新打开
  • VSCode 终端测试:输入 npm -v,正常显示版本即成功
posted @ 2026-09-20 20:27  “匆匆”  阅读(31)  评论(0)    收藏  举报