背景
如果你的项目的 package.json 配置了 script 字段,那么在 VSCode - Explorer 最下面一般可以看到一个收起的 NPM SCRIPTS 面板,这里会列出 script 字段中配置的所有 npm 命令。
hover到每个脚本上,会出现一个 debug 按钮,一个 run 按钮。点击即可调试或者执行 npm 脚本。
但是如果你配置过 vscode 的默认终端,那么直接点击 run 时会执行失败。
比如我就是将 vscode 终端自定义成了本地的 git-bash:
// VSCode/User/settings.json
"terminal.integrated.profiles.windows": {
"git-bash": {
"path": "D:\\Dev\\Git\\PortableGit\\bin\\sh.exe",
},
},
"terminal.integrated.defaultProfile.windows": "git-bash",
报错
点击 run 后,就有以下报错:
* Executing task: npm run test
/d: /d: Is a directory
* The terminal process "D:\Dev\Git\PortableGit\bin\sh.exe /d /c npm run test" terminated with exit code: 126.
* Terminal will be reused by tasks, press any key to close it.
这不是 npm test 脚本问题,而是 NPM Scripts 面板触发任务时用了错误的 shell 组合。
日志里是:
- 可执行程序:
sh.exe - 参数:
/d /c(这是cmd.exe的参数)
所以才会出现 /d: Is a directory。
解决办法1
把上面提到的自定义默认终端设置给删掉,使其恢复成默认的配置(应该是 cmd)。
或者把上面的配置改成 powershell 或者 cmd 应该也行。
解决办法2
如果你想和我一样保留上面自定义默认终端配置为 git-bash,那么手动配置“自动执行脚本”所使用的终端为兼容的终端(比如 cmd 或者 powershell):
// VSCode/User/settings.json
"terminal.integrated.automationProfile.windows": {
"path": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
},
如果修改并报存后不起作用,可以重启 vscode,或者 Ctrl + Shift + P 执行 Developer: Reload Window 命令重新加载vscode窗口,然后试着重新点击 run 按钮。此时应该是能正常执行的。