From 4c31e63b34f08e587462a9c9f4606b0fffa7d2d7 Mon Sep 17 00:00:00 2001 From: yaacovCR Date: Wed, 14 Nov 2018 02:50:21 -0500 Subject: [PATCH 1/2] [fix] windows support Fixes #19 --- .gitignore | 1 + index.js | 4 ++-- package.json | 1 + test/bin.js | 2 +- test/exec.js | 2 +- test/fixtures/level0/node_modules/.bin/level1 | 19 +++++++++++++++---- .../level0/node_modules/.bin/level1.CMD | 7 +++++++ .../level0/node_modules/level1/level1 | 4 ++++ .../level1/node_modules/.bin/level2 | 19 +++++++++++++++---- .../level1/node_modules/.bin/level2.CMD | 7 +++++++ .../level1/node_modules/level2/level2 | 4 ++++ .../level2/node_modules/.bin/.gitignore | 0 12 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 test/fixtures/level0/node_modules/.bin/level1.CMD create mode 100644 test/fixtures/level0/node_modules/level1/level1 create mode 100644 test/fixtures/level0/node_modules/level1/node_modules/.bin/level2.CMD create mode 100644 test/fixtures/level0/node_modules/level1/node_modules/level2/level2 delete mode 100644 test/fixtures/level0/node_modules/level1/node_modules/level2/node_modules/.bin/.gitignore diff --git a/.gitignore b/.gitignore index 3c3629e..1dd88f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +!/test/**/node_modules \ No newline at end of file diff --git a/index.js b/index.js index c7925c6..1599934 100644 --- a/index.js +++ b/index.js @@ -4,8 +4,8 @@ var npmPath = require('npm-path') var childProcess = require('child_process') var exec = childProcess.exec -var spawn = childProcess.spawn -var spawnSync = childProcess.spawnSync +var spawn = require('cross-spawn') +var spawnSync = spawn.sync // polyfill for childProcess.execSync var execSync = childProcess.execSync diff --git a/package.json b/package.json index 77ab83e..0e844e9 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "tape": "^4.9.0" }, "dependencies": { + "cross-spawn": "^6.0.5", "minimist": "^1.2.0", "npm-path": "^2.0.4", "npm-which": "^3.0.1", diff --git a/test/bin.js b/test/bin.js index ba18671..386b870 100644 --- a/test/bin.js +++ b/test/bin.js @@ -5,7 +5,7 @@ var bl = require('bl') var fs = require('fs') var path = require('path') -var spawn = require('child_process').spawn +var spawn = require('cross-spawn') var level0 = path.join(__dirname, 'fixtures', 'level0') var level1 = path.join(level0, 'node_modules', 'level1') diff --git a/test/exec.js b/test/exec.js index 00e1283..b883210 100644 --- a/test/exec.js +++ b/test/exec.js @@ -35,7 +35,7 @@ test('options are optional', function (t) { npmRun(badPath, function (err, stdout, stderr) { t.ok(err, 'has error') - t.equal(err.code, 127) + t.equal(err.code, (process.platform === 'win32' ? 1 : 127)) t.end() }) }) diff --git a/test/fixtures/level0/node_modules/.bin/level1 b/test/fixtures/level0/node_modules/.bin/level1 index 259d864..aca269f 100755 --- a/test/fixtures/level0/node_modules/.bin/level1 +++ b/test/fixtures/level0/node_modules/.bin/level1 @@ -1,4 +1,15 @@ -#!/usr/bin/env node -var path = require('path') -if (process.argv.length > 2) console.error(process.argv.slice(2).join(' ')) -console.log(path.basename(__filename)) +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../level1/level1" "$@" + ret=$? +else + node "$basedir/../level1/level1" "$@" + ret=$? +fi +exit $ret diff --git a/test/fixtures/level0/node_modules/.bin/level1.CMD b/test/fixtures/level0/node_modules/.bin/level1.CMD new file mode 100644 index 0000000..04adf0e --- /dev/null +++ b/test/fixtures/level0/node_modules/.bin/level1.CMD @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\level1\level1" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\level1\level1" %* +) \ No newline at end of file diff --git a/test/fixtures/level0/node_modules/level1/level1 b/test/fixtures/level0/node_modules/level1/level1 new file mode 100644 index 0000000..259d864 --- /dev/null +++ b/test/fixtures/level0/node_modules/level1/level1 @@ -0,0 +1,4 @@ +#!/usr/bin/env node +var path = require('path') +if (process.argv.length > 2) console.error(process.argv.slice(2).join(' ')) +console.log(path.basename(__filename)) diff --git a/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2 b/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2 index 259d864..ac1f04a 100755 --- a/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2 +++ b/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2 @@ -1,4 +1,15 @@ -#!/usr/bin/env node -var path = require('path') -if (process.argv.length > 2) console.error(process.argv.slice(2).join(' ')) -console.log(path.basename(__filename)) +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../level2/level2" "$@" + ret=$? +else + node "$basedir/../level2/level2" "$@" + ret=$? +fi +exit $ret diff --git a/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2.CMD b/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2.CMD new file mode 100644 index 0000000..a1ab1ab --- /dev/null +++ b/test/fixtures/level0/node_modules/level1/node_modules/.bin/level2.CMD @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\level2\level2" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\level2\level2" %* +) \ No newline at end of file diff --git a/test/fixtures/level0/node_modules/level1/node_modules/level2/level2 b/test/fixtures/level0/node_modules/level1/node_modules/level2/level2 new file mode 100644 index 0000000..259d864 --- /dev/null +++ b/test/fixtures/level0/node_modules/level1/node_modules/level2/level2 @@ -0,0 +1,4 @@ +#!/usr/bin/env node +var path = require('path') +if (process.argv.length > 2) console.error(process.argv.slice(2).join(' ')) +console.log(path.basename(__filename)) diff --git a/test/fixtures/level0/node_modules/level1/node_modules/level2/node_modules/.bin/.gitignore b/test/fixtures/level0/node_modules/level1/node_modules/level2/node_modules/.bin/.gitignore deleted file mode 100644 index e69de29..0000000 From de2c5e9ca6f7bdc3358d854e3d49a16eaef3c4a7 Mon Sep 17 00:00:00 2001 From: yaacovCR Date: Wed, 14 Nov 2018 09:59:21 -0500 Subject: [PATCH 2/2] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7fa18a5..7fd9181 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js -before_install: npm install npm -g node_js: - 4 - 6 - 8 + - 10