diff --git a/lib/mungers/cmd.js b/lib/mungers/cmd.js index e1af7a9..49a30b2 100644 --- a/lib/mungers/cmd.js +++ b/lib/mungers/cmd.js @@ -43,7 +43,7 @@ function mungeCmd(workingDir, options) { let npmPath = whichOrUndefined('npm') || 'npm' npmPath = path.dirname(npmPath) + '\\node_modules\\npm\\bin\\npm-cli.js' - replace = m[1] + workingDir + '/node.cmd' + + replace = m[1] + '"' + workingDir + '/node.cmd"' + ' "' + npmPath + '"' + m[3] + m[4] options.args[cmdi + 1] = command.replace(npmre, replace) diff --git a/test/shim-root-space.js b/test/shim-root-space.js new file mode 100644 index 0000000..9c70f28 --- /dev/null +++ b/test/shim-root-space.js @@ -0,0 +1,23 @@ +const IS_WINDOWS = require('is-windows')(); +const tap = require('tap'); +const path = require('path'); +const fs = require('fs'); + +tap.test('spaces in shim-root/homedir path on windows do not break wrapped npm calls', { skip: !IS_WINDOWS }, function(t) { + // create temp folder with spaces in path + process.env.SPAWN_WRAP_SHIM_ROOT = path.join(__dirname, 'fixtures', 'space path'); + + // wrap with custom root path + const sw = require('..'); + const unwrap = sw([]); + + // run a child process with an npm command + const cp = require('child_process'); + const child = cp.exec('npm --version'); + child.on('exit', function(code) { + t.equal(code, 0); + unwrap(); + fs.rmdirSync(process.env.SPAWN_WRAP_SHIM_ROOT); + t.end(); + }); +});