'Does npx no longer do install-less run?
From the nodejs.dev site:
npx allows you to run that npm command without installing it first. If the command isn't found, npx will install it into a central cache:
They use this as an example:
npx cowsay "Hello"
But when I run that:
$ npx cowsay "Hello"
Need to install the following packages:
cowsay
Ok to proceed? (y)
Huh? Is there some preference that I need to set now? I'm used to npx
running things without installing them, like they say on nodejs.dev. I don't really want to install cowsay
in my globals.
Node v14.17.5
NPM 7.21.0
OS:ProductName: Mac OS X
ProductVersion: 10.15.7
Filed as an issue here: https://github.com/nodejs/nodejs.org/issues/4104
Edit: just tested this in NPM 6 and it works as expected. This might be a change in NPM post v6.
✗ npm --version
6.14.16
✗ npx cowsay "Hello"
npx: installed 41 in 7.509s
_______
< Hello >
...
Solution 1:[1]
This appears to be a change after NPM 6.
$ nvm install 18
Downloading and installing node v18.0.0...
...
$ nvm use 18 # this was a fresh install
Now using node v18.0.0 (npm v8.6.0)
$ npx cowsay "Node 18"
Need to install the following packages:
cowsay
Ok to proceed? (y) y
_________
< Node 18 >
---------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
$ nvm use 14
Now using node v14.19.1 (npm v6.14.16)
$ npm uninstall --global cowsay # in case I already had it installed
up to date in 0.037s
$ npx cowsay "Node 14" # NOTE: no confirmation
npx: installed 41 in 5.271s
_________
< Node 14 >
---------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Note: no confirmation for the install in Node 14.
If you want to use a package without confirming the install in Node 7+ you'll need to add the confirm flag. See @Nitesh's answer.
Solution 2:[2]
You can do following if you are not willing to type 'yes' everytime you install.
npm_config_yes=true npx cowsay "hello"
See this https://github.com/npm/cli/issues/2226
npx
also has a --yes
flag you can use to bypass the prompt:
npx --yes some-npm-package
This is undocumented if you run npx --help
, but the documentation for this flag is hidden in the command's "description" on the NPM website.
There is also a --no
flag available if you need to reject the prompt instead.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | jcollum |
Solution 2 | jcollum |