Skip to content

Commit

Permalink
fix: wrongly normalizing slashes in windows
Browse files Browse the repository at this point in the history
This change takes code from npm's cli to change the way the arguments
passed to nodemon are interpreted.

Removes path.normalize and replaces with windowsVerbatimArguments

Fixes #1236
  • Loading branch information
remy committed Feb 1, 2018
1 parent c9d8cd3 commit 52b1f47
Showing 1 changed file with 10 additions and 24 deletions.
34 changes: 10 additions & 24 deletions lib/monitor/run.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,36 +42,22 @@ function run(options) {
var sh = 'sh';
var shFlag = '-c';

if (utils.isWindows) {
sh = 'cmd';
shFlag = '/c';
}

var executable = cmd.executable;
const spawnOptions = {
env: utils.merge(options.execOptions.env, process.env),
stdio: stdio,
}

if (utils.isWindows) {
// under windows if the executable path contains a forward slash, that will
// fail with cmd.exe, so we need to normalize it
if (executable.indexOf('/') !== -1) {
executable = path.normalize(executable);
}

// if the executable path contains a space the whole string must be quoted
// to get windows treat it as 1 argument for cmd.exe
if (executable.indexOf(' ') !== -1 && executable[0] !== '\"'
&& executable[executable.length - 1] !== '\"') {
// remove all quotes from executable (possible backward compat hacks)
executable = executable.replace(/\"/g, '');
}
// taken from npm's cli: https://git.io/vNFD4
sh = process.env.comspec || 'cmd';
shFlag = '/d /s /c';
spawnOptions.windowsVerbatimArguments = true;
}

var executable = cmd.executable;
var args = runCmd ? utils.stringify(executable, cmd.args) : ':';
var spawnArgs = [sh, [shFlag, args]];

spawnArgs.push({
env: utils.merge(options.execOptions.env, process.env),
stdio: stdio,
});
var spawnArgs = [sh, [shFlag, args], spawnOptions];

const firstArg = cmd.args[0] || '';

Expand Down

0 comments on commit 52b1f47

Please sign in to comment.