mysticatea / npm-run-all

A CLI tool to run multiple npm-scripts in parallel or sequential.
MIT License
5.72k stars 240 forks source link

Ensure `npm run` is being called instead of `npx run` #245

Closed MarmadileManteater closed 1 year ago

MarmadileManteater commented 1 year ago

Problem:

If you run npm-run-all using npx (EX: npx npm-run-all clean build:dev test), it will prompt you to install runjs if it is not already installed.

Screenshot_2022-10-28_13-41-05

Then, it will throw an error that looks something like this: image

This is because running npx npm-run-all causes process.env.npm_execpath to point to npx instead of npm.

npm_cli_is_npx

The underlying command ends up something like npx run clean which will attempt to run runjs instead of running the npm scripts, and of course, clean isn't a javascript file or anything that runjs can do anything with, so that is why it throws.

For reference, this is what it looks like when I intentionally run runjs in place of npm run. image If you look here at run.js, you can see the code that is being unintentionally ran by npm-run-all.

I am pretty sure this problem is related to #196. The error looks to be exactly the same, and on my machine, yarn aliases to npx yarn which would cause yarn to throw an error where npm would work fine. yarn: image npm: image

Testing:

I went ahead and ran the automated tests in GH actions, and all the of the current tests look like they pass with these changes. It might make sense to introduce a test for running npm-run-all using npx, and maybe, even one for running yarn with npx.

[UPDATE]: not sure why AppVeyor tests failed (I mean, the tests didn't even run, they just crapped out before they started). The error does not seem to be related to my changes at all, so idk 🤷‍♀️ I'm looking into it, but if someone knows, I would love clarification.

Cannot find module 'C:\projects\npm-run-all\node'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! npm-run-all@4.1.5 _mocha: `mocha "test/*.js" --timeo

[2ND UPDATE]: It seems that the same error is happening in other PRs which don't even touch the code:

EX: #216 => https://ci.appveyor.com/project/mysticatea/npm-run-all/builds/41262284 This PR only touches a markdown file, so it looks like the App Veyor PR test doesn't work anymore which is not super suprising since the last commit was 3 years ago.

Additional Information

I also modified how yarn is detected because I modified npmPath (which was how yarn was being detected previously). Before, isYarn was false when npx was used in conjunction with yarn. With these changes, it should actually detect yarn even if you run yarn using npx. (EX npx yarn dev)

before: before after: image