While working on mdbook build.rs issue I've discovered that on nightly the std::Command::new() for a windows 10 batch script "npm.cmd" results in underlying node-js process to not find required resource paths.
I tried this code:
use std::process::Command;
fn main() {
let status = Command::new("npm.cmd")
.arg("-v")
.output();
println!("Command exited with '{:?}'", status);
let status = status.expect("Process spawn should succeed!");
if !status.status.success() {
panic!("Command failed!");
}
}
I expected to see this happen:
This works on all channels for my linux and windows 7 boxes (did not test other than msvc here) as well as stable and beta for windows 10 box (and appveyor)
Command exited with 'Ok(Output { status: ExitStatus(ExitStatus(0)), stdout: "3.10.10\n", stderr: "" })'
Instead, this happened only on windows 10 (and appveyor) msvc nightly:
Command exited with 'Ok(Output { status: ExitStatus(ExitStatus(1)), stdout: "", stderr: "module.js:471\r\n throw err;\r\n ^\r\n\r\nError: Cannot find module \'C:\\projects\\nightly-cmd-fail\\node_modules\\npm\\bin\\npm-cli.js\'\r\n at Function.Module._resolveFilename (module.js:469:15)\r\n at Function.Module._load (module.js:417:25)\r\n at Module.runMain (module.js:604:10)\r\n at run (bootstrap_node.js:389:7)\r\n at startup (bootstrap_node.js:149:9)\r\n at bootstrap_node.js:504:3\r\nmodule.js:471\r\n throw err;\r\n ^\r\n\r\nError: Cannot find module \'C:\\projects\\nightly-cmd-fail\\node_modules\\npm\\bin\\npm-cli.js\'\r\n at Function.Module._resolveFilename (module.js:469:15)\r\n at Function.Module._load (module.js:417:25)\r\n at Module.runMain (module.js:604:10)\r\n at run (bootstrap_node.js:389:7)\r\n at startup (bootstrap_node.js:149:9)\r\n at bootstrap_node.js:504:3\r\n" })'
thread 'main' panicked at 'Command failed!', main.rs:11
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Please note that the panic is explicitly triggered in main.rs to make appveyor report the error.
The npm.cmd sets paths for node-js via environmental variables and these seem not to be forwarded properly.
Sorry for mostly useless description as I have no experience with npm/node and no access to the actual win10 box on which the problem was reproduced (I was only able to locate this problem via appveor logs).
Meta
rustc --version --verbose
rustc 1.20.0-nightly (445077963 2017-06-20)
binary: rustc
commit-hash: 445077963c55297ef1e196a3525723090fe80b22
commit-date: 2017-06-20
host: x86_64-pc-windows-msvc
release: 1.20.0-nightly
LLVM version: 4.0
But the problem exists at least since (sorry no verbose output here. I have no access to that win10 box anymore)
rustc 1.19.0-nightly (04145943a 2017-06-19)
Link to appveyor showing the problem:
https://ci.appveyor.com/project/budziq/nightly-cmd-fail/build/1.0.10
While working on mdbook build.rs issue I've discovered that on nightly the std::Command::new() for a windows 10 batch script "npm.cmd" results in underlying node-js process to not find required resource paths.
I tried this code:
I expected to see this happen:
This works on all channels for my linux and windows 7 boxes (did not test other than msvc here) as well as stable and beta for windows 10 box (and appveyor)
Instead, this happened only on windows 10 (and appveyor) msvc nightly:
Please note that the panic is explicitly triggered in main.rs to make appveyor report the error.
The npm.cmd sets paths for node-js via environmental variables and these seem not to be forwarded properly.
Sorry for mostly useless description as I have no experience with npm/node and no access to the actual win10 box on which the problem was reproduced (I was only able to locate this problem via appveor logs).
Meta
But the problem exists at least since (sorry no verbose output here. I have no access to that win10 box anymore)
rustc 1.19.0-nightly (04145943a 2017-06-19)Link to appveyor showing the problem:
https://ci.appveyor.com/project/budziq/nightly-cmd-fail/build/1.0.10