Seems like you tried to install a npm package globally rather than locally, as the man npm install
describes:
The -g or --global argument will cause npm to install the package globally rather than locally.
Generally, when you are setting up a npm project (among many others that you could have), it's not a good idea to install packages on Node.js global modules (/usr/local/lib/node_modules), as your the debug log suggested.
Instead of using -g
, use --save
, which will automatically save the package as a dependency for your package.json
file:
Like this:
$ npm install express-generator --save
$ cat package.json
{
"name": "first_app_generator",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "ivanleoncz",
"license": "MIT",
"dependencies": {
"express-generator": "^4.16.0"
}
}
But as the other answers mentioned, if you're going to use -g
, you have to use sudo
(if your user has sudo privileges: see /etc/sudoers) when performing npm install express-generator -g
, but indeed, it's not a good idea, possibly causing permission problems.
NOTICE
There are instructions for installing express-generator
with -g
option, in order to have the script express-cli.js
available on the system path, but you can use the locally installed script as well, located at the node_modules
if your npm project:
$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp
If a message like /usr/bin/env: ‘node’: No such file or directory shows up, install nodejs-legacy
(Debian/Ubuntu)
IMHO, using -g
(also using sudo
) is like hic sunt dracones, if you are unsure of the consequences.
For further information: