Closed kgryte closed 8 years ago
Sorry for such a late response. I don't have a Windows setup at home. I got a basic setup going and tried something real quick.
Setup:
Windows 7
git for Windows 2.8.1
node 4.4.3
MinGW with MSYS installed (grabbed the installer from sourceforge)
I installed istanbul globally:
npm install -g istanbul
Then in git bash, cmd.exe, and MSYS bash this is what I got:
$ istanbul
Need a command to run
Try "istanbul help" for usage
Just to make sure the line in question was in the script I ran the following in git bash:
$ cat `which istanbul`
#!/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/node_modules/istanbul/lib/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/istanbul/lib/cli.js" "$@"
ret=$?
fi
exit $ret
Looks like this needs some more investigation to figure out why this is causing issues for you. I'll try to test some git extensions at work when I get a chance (it might take me a few days though). They were the reason originally #4 was opened.
@copenhas Thanks for the response. Might be worth trying to run some of the istanbul
commands (e.g., istanbul cover
) to see if things work on your end. And would there be any difference in a local installation as opposed to installing globally? Also, not sure if this is an istanbul
specific issue.
I'm seeing the same issue when trying to run sass-lint
so I don't think it's istanbul
specific
@copenhas wanted to follow-up and see if you had any updates.
Out of curiosity, I made some investigation on this.
In fact, SyntaxError: missing ) after argument list
is reported by node.js and is not reported by shell. So this does not necessarily mean something goes wrong with the shim shell script.
With some reading of the code of istanbul
and testing, I think this is caused by running the shim shell script via node. That is, in your particular case, node /c/projects/foo/node_modules/.bin/tape
was run under the hood, where ./bin/tap
is the shim shell script rather than the actual node.js script. You may check this with --verbose
added to your istanbul cover
command.
See istanbul/run-with-cover.js#L117 for related code.
So even if this is not istanbul
specific, I thinks it's not caused by #4, and not related to #16.
(I'm new to node.js and not using istanbul
, so chances are I missed or misunderstood something. Please tell me if i'm wrong.)
I have not had a chance to look into again. I'm afraid I got caught up with work long enough to forget about this issue. I apologize.
I did test out our internal git extensions (written in node and the reason I submitted #4 ), and they work on latest node.js. After reading @pallxk comment (thanks for looking into it), I looked at the Istanbul documentation here. It looks like the command is expecting a node.js javascript file and not a shell command.
Perhaps instead of passing istanbul /c/projects/foo/node_modules/.bin/tape
you could try figuring out what the main module is and pass it that. Based on tape's package.json it looks like it would be something like this: /c/projects/foo/node_modules/tape/main.js
.
I've got the exact same issue, driving me crazy. The same exact code runs on my Mac w/o this error, but on Windows it just won't run.
Don't have any idea where to start looking.
@kdawg1406 I believe the difference between macOS and Windows is that macOS supports she-bang scripts, while in Windows the commands have to be wrapped up into the cmd shim. So when you pass in ./node_modules/.bin/mocha
on macOS the file probably contains JavaScript, but on Windows it contains shell commands.
Per the comments above you'll find that Istanbul is actually expecting a JavaScript file as the argument and not shell script or command. I believe that's what's causing the syntax error for you. You'll need to find out what the main module file path is so you can pass it in cross platform.
Looks like Istanbul documents it some at README.md#usage-on-windows
@copenhas Bingo!
This works for mocha on Windows:
./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha
Thank you for your outstanding support and very quick response.
Best to you,
Karl
@copenhas Was able to resolve the issue using a solution similar to the solution described above. Thanks for the help. Closing the issue.
@kdawg1406 - your solution doesn't work for me - when i use: ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha
error is:
\node_modules\.bin\_mocha:2
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
^^^^^^^
SyntaxError: missing ) after argument list
when i use (as you suggest): ./node_modules/.bin/istanbul cover ./node_modules/bin/_mocha
error is: Unable to resolve file [./node_modules/bin/_mocha]
I don't understand how it can't resolve the file because i can see the file at ./node_modules/bin/_mocha]
@ReinsBrain Not sure, this was a long time ago, so much as changed in the toolchain. Sorry, I don't have an answer for you.
This doesn't work for storybook. trying to debug via node --inspect node_modules/.bin/storybook-start -p 9001
throws the same error.
@ReinsBrain You might need to change that line to npx _mocha
.
Also, this error is happening even in the Webpack project. I get it when I run from a child process started with node
.
Looks like something these libraries depend on is running this code in a way that Windows doesn't understand.
Whoever wrote the original code (cmd-shim
?) has an incorrect assumption about the OS when commands are run from Node.js rather than from the OS's CLI.
This issue seems to be related to #16, and possibly to the change introduced in #4 by @copenhas.
Description
Running Windows builds on AppVeyor with MinGW and MSYS. When executing test commands of the sort,
I encounter the following error
Environments
OS:
Node/npm versions:
Notes
I am able to run other commands, such as
I tried to track down where this line
occurs in source code. The only place I found was in this dependency, which includes it at line 135 when creating the Windows shim.
v2.0.2
which included #4.