发布于2026-07-14 阅读(0)
扫一扫,手机访问
在 Remote Codespaces 里启动 Node 项目时遇到脚本执行错误,别着急怀疑环境配置——绝大多数情况下,问题出在 PowerShell 的执行策略上。
终端输出这样的信息:File start.ps1 cannot be loaded because running scripts is disabled on this system。这不是 Node 环境没装好,也不是项目路径配错了——真正的原因,藏在 Codespaces 默认终端(PowerShell)沿用的 Windows Restricted 策略里。这种策略下,连本地生成的包装脚本(比如 node_modules/.bin/npm 实际是 npm.ps1)都会被静默拦截。

Codespaces 底层虽然是 Linux 容器,但 VSCode 远程终端默认启用了 PowerShell for Linux(通过 powershell-linux),而且策略继承自用户配置。即便容器里没安装 Windows,PowerShell 仍然按照 Restricted 模式启动,导致所有 .ps1 封装脚本无法执行。
cannot be loaded because running scripts is disabled,但 node --version 却可以正常运作chmod +x 对 .ps1 文件完全无效devcontainer.json 或添加 sudo在 Codespaces 终端中依次运行以下命令:
Get-ExecutionPolicy -Scope CurrentUser —— 如果返回 Restricted,就确认了问题所在Set-ExecutionPolicy RemoteSigned -Scope CurrentUserGet-ExecutionPolicy -Scope CurrentUser 应该输出 RemoteSigned完成后,记得关闭所有终端标签页(Ctrl+Shift+` 关掉再重新打开),再试 npm run dev。旧终端不会自动刷新策略,重启是必须的步骤。
这个错误经常被误判为路径不对,但实际上调试器启动链被 PowerShell 拦截了——特别是在 launch.json 的 program 字段指向一个 shell 脚本(比如 ./scripts/start.sh)或 npm script 封装入口的时候。
"program": "${workspaceFolder}/src/index.js"(直接指向 JS 文件)"program": "${workspaceFolder}/start.sh" 或 "program": "npm"(会触发 PowerShell 执行封装)console 类型任务配合 preLaunchTask,绕过调试器直接调用node_modules/.bin 下的二进制本质上是 .ps1,所以 eslint、ts-node 等 CLI 也会因此失败,同样靠上述策略修复真正容易被忽略的点:Codespaces 的终端策略是 per-user 的,但如果用同一个 GitHub 账号在多个 Codespace 之间切换,策略不会自动同步——每个新空间都要单独执行一次 Set-ExecutionPolicy。别指望一次设置就能永久生效。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8