Repository navigation
node: --run requires an argument #53944
Description
Activity
- addeddocIssues and PRs related to Node.js documentation.Issues and PRs related to Node.js documentation.
on Jul 19, 2024 - added and removeddocIssues and PRs related to Node.js documentation.Issues and PRs related to Node.js documentation.
on Jul 19, 2024 Reproductions:
$ node --run '' Welcome to Node.js v22.5.0. Type ".help" for more information. >$ node --run node: --run requires an argument$ node --run . ExperimentalWarning: Task runner is an experimental feature and might change at any time Missing script: "." Available scripts are: <...>- addeddocIssues and PRs related to Node.js documentation.Issues and PRs related to Node.js documentation.
on Jul 19, 2024 If someone sends a PR to fix the docs, it will probably be accepted.
Reacted by Aviv KellerWhat about the first example from @redyetidev's last comment? What's the expected behavior? Why is there a REPL being started?
What about the first example from @redyetidev's last comment? What's the expected behavior? Why is there a REPL being started?
My reproductions were a bit out of order, but at the end of the issue, the author notes:
Giving the empty string to --run does not try to execute { "scripts": { "": "echo hi" } }. Neither does npm run '' though :)
That doesn’t explain why the repl is started, though? I was surprised when that happened 😄
Reacted by Aviv KellerThat doesn’t explain why the repl is started, though? I was surprised when that happened 😄
FWIW my assumption is that it treats an empty string as if the flag wasn't there, so it performs the action as if that flag wasn't applied, in this case, trigging the REPL.
That's still quite odd and hardly seems desirable... I am wondering if it's intentional. @anonrig
Reproductions:
$ node --run '' Welcome to Node.js v22.5.0. Type ".help" for more information. >That's odd behaviour. This is valid JSON:
{ "name": "nodejs_run_test", "scripts": { "hello": "echo hello", "world": "echo world", "": "echo !" } }i.e. it's valid to have an empty string as a JSON key. So I would expect
node --run ''to behave the same as if a non-existent script was specified (unless of course a""script was defined as in the example above).FWIW as reference,
npmcan't run a""named script:$ npm run-script '' npm error valid event not provided to runScript npm error A complete log of this run can be found in: /home/rlau/.npm/_logs/2024-07-22T12_39_38_822Z-debug-0.log $so Node.js could choose to do the same (but should probably be documented to do so, given that
""is a valid JSON key).Since npm compatibility clearly wasn't a priority, I think it's reasonable for Node.js to implement some reasonable behavior instead.
Since npm compatibility clearly wasn't a priority, I think it's reasonable for Node.js to implement some reasonable behavior instead.
Agreed, I'm just not sure the current behaviour is reasonable 🙂.
Affected url(/sitelet?url=https%3A%2F%2Fgithub.com%2Fnodejs%2Fnode%2Fissues%2Fs)
https://nodejs.org/api/cli.html#--run
Description of the problem
The docs for
node --runsay:I thought that meant that if I run
node --run, I’ll get a print of all available scripts (similar to hownpm runworks when not given a script name). But that results in an error:It’s still possible to get a listing of all available scripts, by passing a script name that does not exist:
I’m not sure what the exact problem is though:
node --runshould in fact print the available scripts?Thing I found while messing around with this that is probably out of scope in this issue:
Giving the empty string to
--rundoes not try to execute{ "scripts": { "": "echo hi" } }. Neither doesnpm run ''though :)