Skip to content

由于去年的nodejs安全更新引发的一个坑,有可能与#259有关 #292

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
npc1054657282 opened this issue Mar 24, 2025 · 1 comment
Labels

Comments

@npc1054657282
Copy link

Xmake 版本

xmake v2.9.8+20250205

操作系统版本和架构

Windows 11 23H2 Version 22631.5039

描述问题

我的xmake使用msys2安装,环境变量路径设置为{MSYS2_PATH}\mingw64\bin,可以通过终端直接执行xmake。
使用vscode执行XMAKE命令,提示“spawn xmake ENOENT”
经排查,终端执行的命令实际为{MSYS2_PATH}\mingw64\bin\xmake.cmd脚本,而非直接执行可执行文件
而根据https://stackoverflow.com/questions/78420489/error-when-running-npm-script-with-yarn-err-spawn-einval:需要注意的是,对于使用 child_process.spawn 和 child_process.spawnSync 的 Windows 用户来说,存在一个重大变更。如果 .bat 或 .cmd 文件传递给 child_process.spawn 和 child_process.spawnSync 时未设置 shell 选项,Node.js 现在会报错 EINVAL 。如果 spawn/spawnSync 的输入经过清理,用户现在可以传递 { shell: true } 作为选项,以防止 EINVALs 错误的发生。
就个人而言,此次将"xmake.executable"配置为{MSYS2_PATH}\mingw64\share\xmake\xmake.exe,解决了本人的这一问题。
因此,由于nodejs安全更新,引发了一个坑,从2024年起,windoes的cmd文件无法被识别,导致同一个指令,在终端可以成功执行,但是xmake-vscode无法识别,这很容易引发困扰。

期待的结果

在xmake-vscode中发现这部分指令是由process.runv执行的。我不太熟悉这部分内容,需要合理配置或使用其他命令,使得xmake-vscode能够执行cmd命令,以确保若终端可以执行xmake,则xmake-vscode同样可以识别。
如果无法识别cmd命令符合预期,则可能需要在文档中进行说明。

工程配置

target("foo")
set_kind("binary")
add_files("src/*.c")

附加信息和错误日志

Error: spawn xmake ENOENT

@waruqi
Copy link
Member

waruqi commented Mar 24, 2025

暂时没环境测试这个,你可以直接调下代码 提个 pr 过来,判断当前是 msys2 shell 下,并且后缀是 .cmd/.bat,设置 shell = true 去执行

const pipe = proc.spawn(program, args, {env: addenv(process.env, env), cwd: workingDirectory});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants