Cannot use installed packages with npm - node.js

Edit: Adding ~/npm/bin to path with PATH=$PATH:~/npm/bin helped, thank you Joachim Isaksson
EDIT:
Seems like i cannot install any packages with npm. After sucessfully installing them, i cannot use them with the assigned commands in the package. "No command '' found".
node -v
v0.11.14
npm -v
2.0.0
At ubuntu machine
It seems like i cannot install the resume-cli module, found here with using npm. Even though it installs without errors, it does not understand the basic commands after installing. Could it be a problem with the warning, showed under?
sudo npm install -g resume-cli
i get
npm WARN engine html-to-text#0.0.8: wanted: {"node":"~0.8.0"} (current: {"node":"0.10.32","npm":"1.4.28"})
Then
/home/bjornasm/npm/bin/resume -> /home/bjornasm/npm/lib/node_modules/resume-cli/index.js
resume-cli#0.3.10 /home/bjornasm/npm/lib/node_modules/resume-cli
├── cli-spinner#0.1.5
├── char-spinner#1.0.1
├── commander#2.3.0
├── colors#0.6.2
├── open#0.0.5
├── chalk#0.4.0 (has-color#0.1.7, ansi-styles#1.0.0, strip-ansi#0.1.1)
├── async#0.9.0
├── read#1.0.5 (mute-stream#0.0.4)
├── terminal-menu#0.3.2 (inherits#2.0.1, charm#0.1.2, resumer#0.0.0)
├── superagent#0.18.2 (extend#1.2.1, qs#0.6.6, methods#1.0.1, cookiejar#2.0.1, component-emitter#1.1.2, reduce-component#1.0.1, mime#1.2.11, debug#1.0.4, readable-stream#1.0.27-1, form-data#0.1.3, formidable#1.0.14)
├── resume-to-text#0.0.15 (mustache#0.8.2, html-to-text#0.0.8)
├── resume-to-html#0.0.21 (gravatar#1.0.6, resume-to-markdown#0.0.14, marked#0.3.2, mustache#0.8.2, lodash#2.4.1)
├── jsonlint#1.6.2 (nomnom#1.8.0, JSV#4.0.2)
└── resume-schema#0.0.15 (z-schema#2.4.10)
Then when running the following
resume --help
i get
resume: command not found
Anyone familiar with this?

Below are the steps to install a given release from source
NOTE - this installs nodejs which gives you both node as well as npm, they come together per release.
to start fresh remove prior node.js and npm installs as well as these :
sudo mv ~/.npmrc ~/.npmrc_ignore
sudo mv ~/.npm ~/.npm_ignore
sudo mv ~/tmp ~/tmp_ignore
sudo mv ~/.npm-init.js ~/.npm-init.js_ignore
to install nodejs and npm as yourself NOT root do these commands (OSX/linux) :
export NODE_PARENT=${HOME}/bin_0_10_32
mkdir ${NODE_PARENT}
download source from : http://nodejs.org/download/
cd node-v0.xxxx
./configure --prefix=${NODE_PARENT}/nodejs
make -j8
make install # IMPORTANT this is NOT using sudo
# not wanted since installing into $USER owned $NODE_PARENT
which puts it into dir defined by above --prefix
export PATH=${NODE_PARENT}/nodejs/bin:$PATH
define environment variable NODE_PATH so node can find dir for modules otherwise
npm install xxx will put newly installed module into current dir :
export NODE_PATH=${NODE_PARENT}/nodejs/lib/node_modules
when you use syntax : npm install -g some_cool_module
the -g for global installs it into dir $NODE_PATH and not your $PWD
nodejs install gives you npm as well :
ls -la ${NODE_PARENT}/nodejs/bin
Subsequent modules you install using global flag -g will automagically put their ~binaries~ into above bin dir ... like browserify
Now put above three export xxx=yyy
commands into your ~/.bashrc or some such so your environment is setup

Related

express: command not found , has worked before?

I'm working on a OSX 10.10.4, I have worked with node.js and express before on this computer.
But now when I want to start a new application, the computer won't recognize the command express anymore.
I've tried installing it with all these commands:
- npm install express
- npm install -g express
- npm install express -g
- sudo npm install -g express
- sudo npm install express -g
- npm install express-generator
- npm install -g express-generator
- npm install express-generator -g
- sudo npm install -g express-generator
- sudo install express-generator -g
- sudo npm install -g express-generator#3
- sudo npm install -g express-generator#4
But it still doesn't recognize the command express
This is the output when I install without the -g
npm install express
express#4.13.3 node_modules/express
├── escape-html#1.0.2
├── merge-descriptors#1.0.0
├── cookie#0.1.3
├── array-flatten#1.1.1
├── utils-merge#1.0.0
├── cookie-signature#1.0.6
├── methods#1.1.1
├── fresh#0.3.0
├── range-parser#1.0.2
├── vary#1.0.1
├── path-to-regexp#0.1.7
├── content-type#1.0.1
├── etag#1.7.0
├── parseurl#1.3.0
├── content-disposition#0.5.0
├── serve-static#1.10.0
├── depd#1.0.1
├── qs#4.0.0
├── finalhandler#0.4.0 (unpipe#1.0.0)
├── on-finished#2.3.0 (ee-first#1.1.1)
├── debug#2.2.0 (ms#0.7.1)
├── proxy-addr#1.0.8 (forwarded#0.1.0, ipaddr.js#1.0.1)
├── type-is#1.6.6 (media-typer#0.3.0, mime-types#2.1.4)
├── accepts#1.2.12 (negotiator#0.5.3, mime-types#2.1.4)
└── send#0.13.0 (destroy#1.0.3, statuses#1.2.1, ms#0.7.1, mime#1.3.4, http-errors#1.3.1)
and when I install with the -g
sudo npm install -g express-generator
Password:
/Users/Maiteh/.node/bin/express -> /Users/Maiteh/.node/lib/node_modules/express-generator/bin/express
express-generator#4.13.1 /Users/Maiteh/.node/lib/node_modules/express-generator
├── sorted-object#1.0.0
├── commander#2.7.1 (graceful-readlink#1.0.1)
└── mkdirp#0.5.1 (minimist#0.0.8)
I have tried some other stuff like the PATH and nodejs-legacy, but none of them work.
With the sudo apt-get install nodejs-legacy the computer doesn't find the command apt-get.
The reason I got express:command not found after I installed was because my $PATH didn't know where express was.
To anyone wanting to install the express command line tools I did this
sudo npm install express-generator -g
which resulted in
/usr/local/share/npm/bin/express -> /usr/local/share/npm/lib/node_modules/express-generator/bin/express
express-generator#4.13.1 /usr/local/share/npm/lib/node_modules/express-generator
├── sorted-object#1.0.0
├── commander#2.7.1 (graceful-readlink#1.0.1)
└── mkdirp#0.5.1 (minimist#0.0.8)
when I tried express --version I got a command not found
Open your bash_profile from terminal with open ~/.bash_profile
After that add the path you got after you installed express, in my case it was
/usr/local/share/npm/lib/node_modules/express-generator/bin/express
Add this to your bash_profile
export PATH=/usr/local/share/npm/lib/node_modules/express-generator/bin:$PATH
Save the file and go back to terminal. Enter hash -r and then quit terminal and start it again.
Now if you try express --version for example you should see that the command line tools are working.
There's kind of a mishmash of problems you're describing here, so I'll try to address them one at a time.
Express is a popular framework for node.js. The typical way to add it to your project is to do npm install --save express and then it will save it into your package.json file and install it into node_modules. Adding -g to that command would attempt to install it globally, but that's not how express is used. Express is used on a per-project basis. See their website for details.
In the big list of commands you've run, you mention express-generator. Express-generator is a tool that lets you quickly build out some boilerplate to make starting an express project a bit easier. Since express-generator is meant to be run globally and not inside a project, you DO install it with the -g flag. See their website for details on use and installation.
You're trying to install some more node stuff with the apt-get command. That command is used for package management on Linux (typically Ubuntu/Debian) machines. Mac OS X doesn't come with it (and you absolutely don't need it). Any instructions that mention running apt-get are not targeted towards Mac users.
Essentially, I don't think you have a problem, the logs you show are exactly what I'd expect to see. Generate a boilerplate project with express-generator and you should be all set to start working on your express project. Good luck!

Strange npm behavior when installing packages like grunt

I run the following command in my bash and I get the related results:
merianos#merianos-desktop:~$ sudo npm install -g grunt-cli
/usr/local/bin/grunt -> /usr/local/lib/node_modules/grunt-cli/bin/grunt
grunt-cli#0.1.13 /usr/local/lib/node_modules/grunt-cli
├── resolve#0.3.1
├── nopt#1.0.10 (abbrev#1.0.7)
└── findup-sync#0.1.3 (lodash#2.4.2, glob#3.2.11)
and
merianos#merianos-desktop:~$ grunt
/usr/bin/env: node: No such file or directory
I also have try to install bower and gulp but again, when I try to execute them, I get a message related to the grunt above.
Can someone please help me ?
Just to know, I just installed Ubuntu 15.04. I don't know if that helps :)
Ubuntu package nodejs provide a binary as a /usr/bin/nodejs, not a /usr/bin/node, so most of cli tools can't find it. To solve the problem you need to make a symlink:
sudo ln -sT /usr/bin/nodejs /usr/bin/node

Cannot install express-generator globally with nvm

I'm using NVM to avoid using sudo to install things globally. It works fine for everything from Bower, to Grunt, etc. However, when I do npm install -g express-generator it doesnt work. For example, heres what I get when I globally install Bower:
npm install -g bower
/Users/jrdillon522/.node/bin/bower -> /Users/jrdillon522/.node/lib/node_modules/bower/bin/bower
bower#1.3.12 /Users/jrdillon522/.node/lib/node_modules/bower
├── is-root#1.0.0
...
...
...
├── update-notifier#0.2.0 (semver-diff#0.1.0, string-length#0.1.2, latest-version#0.2.0, configstore#0.3.1)
├── mout#0.9.1
├── handlebars#2.0.0 (optimist#0.3.7, uglify-js#2.3.6)
├── inquirer#0.7.1 (figures#1.3.3, mute-stream#0.0.4, through#2.3.6, readline2#0.1.0, lodash#2.4.1, cli-color#0.3.2, rx#2.3.14)
└── insight#0.4.3 (object-assign#1.0.0, async#0.9.0, chalk#0.5.1, os-name#1.0.1, lodash.debounce#2.4.1, tough-cookie#0.12.1, configstore#0.3.1, inquirer#0.6.0)
Works fine right? When I install the Express Generator I get the classic error:
npm ERR! Please try running this command again as root/Administrator.
So I run sudo npm install -g express-generator. Heres what I get then:
sudo npm install -g express-generator
Password:
/Users/myName/.node/bin/express -> /Users/myName/.node/lib/node_modules/express-generator/bin/express
express-generator#4.9.0 /Users/myName/.node/lib/node_modules/express-generator
├── mkdirp#0.5.0 (minimist#0.0.8)
└── commander#1.3.2 (keypress#0.1.0)
➜ ~ express -v
zsh: command not found: express
➜ ~
Why??
It looks like your bin path (/Users/myName/.node/lib/node_modules/express-generator/bin/express) isn't added to your environment.
If you modify your .bashrc file, add the following line to the bottom of your file to make things work as expected:
export PATH=$PATH:/Users/myName/.node/lib/node_modules/express-generator/bin
Then retry the installation.

Command not found when trying to run a nodeschool lesson

I'm not sure if this is purposeful but when running the...
npm install learnyounode -g
..command in terminal, the module is being created in my home directory. When I try to run the 'learnyounode' command from the directory that I run the npm install from I get the message 'command not found'. I've looked in the usr directory but the learnyounode directory is not in there.
After everything intalls I get the following output
/Users/username/npm/bin/learnyounode -> /Users/username/npm/lib/node_modules/learnyounode/learnyounode.js
learnyounode#0.4.1 /Users/username/npm/lib/node_modules/learnyounode
├── duplexer#0.1.1
├── through#2.3.4
├── boganipsum#0.1.0
├── hyperquest#0.1.8 (through#2.2.7)
├── concat-stream#1.2.1 (bops#0.0.6)
├── bl#0.6.0 (readable-stream#1.0.26)
├── through2-map#1.2.1 (through2#0.2.3, terminus#1.0.9)
└── workshopper#0.7.2 (map-async#0.1.1, tuple-stream#0.0.2, split#0.2.10, mkdirp#0.3.5, xtend#2.1.2, colors-tmpl#0.1.0, terminal-menu#0.2.0, optimist#0.6.1, msee#0.1.1)
ps. I have a fresh install of node in my usr folder. I am more concerned that this problem is going to happen when I want to install other packages via NPM in the future.
I installed without the -g flag and it installed globally.
Trying to install learnyounode,
This path returns:
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

Cannot find module 'findup-sync' when trying to run grunt

I am having trouble running grunt-cli after installing it. I run
npm install -g grunt-cli
then running grunt errors with
node.js:63
throw e;
^
Error: Cannot find module 'findup-sync'
at loadModule (node.js:275:15)
at require (node.js:411:14)
at Object.<anonymous> (/home/tmartin/bin/grunt:9:14)
at Module._compile (node.js:462:23)
at Module._loadScriptSync (node.js:469:10)
at Module.loadSync (node.js:338:12)
at Object.runMain (node.js:522:24)
at Array.<anonymous> (node.js:756:12)
at EventEmitter._tickCallback (node.js:55:22)
at node.js:773:9
This is what I have installed:
tmartin#timcomp:~$ npm list -g
/home/tmartin/lib
└─┬ grunt-cli#0.1.6
├─┬ findup-sync#0.1.2
│ ├─┬ glob#3.1.21
│ │ ├── graceful-fs#1.2.0
│ │ ├── inherits#1.0.0
│ │ └─┬ minimatch#0.2.11
│ │ ├── lru-cache#2.2.2
│ │ └── sigmund#1.0.0
│ └── lodash#1.0.1
└─┬ nopt#1.0.10
└── abbrev#1.0.4
I had to install and link findup-sync and a few other npm packages to get these dependency issues to go away. I though npm was supposed to handle them for us, but installing the dependencies manually made the issues go away.
npm install findup-sync -g
npm link findup-sync
I got mine running again reinstalling grunt-cli globally and in my repo.
npm install -g grunt-cli
cd myrepo
npm install grunt-cli
I think Yosemite installation broke some things in my files ...
This is because npm doesn't set the right permission to sub-directory node_modules in /usr/lib/node_modules/grunt-cli.
In my case, I had:
drwxr-x--- 6 nobody root 4096 16 févr. 17:08 node_modules
When running grunt as non-root user, I had the same error (Cannot find module 'findup-sync') because of a permission denied to read this directory.
The solution is to fix permission with chmod: chmod a+rx node_modules.
But in fact, all directories was involved. The best way was to todo:
find /usr/lib/node_modules/grunt-cli -type d -exec chmod a+rx {} \;
This is maybe a distribution bug (I use Archlinux).
This may seem simple, but if anyone else is unsure if there's a permissions problem, try running sudo grunt then go from there.
I use NVM and was having this problem whenever I changed the active node version.
Following #davidcondrey 's suggestion worked for me. The catch really was to install grunt-cli before grunt. The order made a difference and fixed it.
npm i -g grunt-cli grunt
#inostia 's answer of using sudo to test the permissions was OK, but gave me quite a headache with file permissions, as all the grunt-processed files were inacessible by git later and broke my versioning.
This also may be obvious, but in my case I had set up my npm path off my home directory (on a chromebook) and needed to add .node_modules to my .profile
PATH=~./node_modules:$PATH
Then run:
source ~/.profile
I was able to fix this by reinstalling Grunt using these commands:
sudo npm remove -g grunt-cli
sudo npm install -g grunt-cli
This issue occurs if you change your NodeJS version.
After changing the node version, re installing grunt or npm install will resolve the issue.
Tried all the answers above and I could not get grunt to work without using sudo
Finally came across this Wordpress article and deleted the link to /usr/local/lib/node_modules/grunt/bin/grunt
lrwxrwxrwx 1 root root 35 Apr 19 22:45 /usr/local/bin/grunt -> ../lib/node_modules/grunt/bin/grunt
using sudo rm /usr/local/bin/grunt
Then I linked to the grunt executable in /usr/local/lib/node_modules/grunt-cli/bin
using sudo ln -s /usr/local/lib/node_modules/grunt-cli/bin/grunt /usr/local/bin/grunt
Now, I can run grunt without using sudo
I solved this by running:
npm install -gg grunt-cli --force

Resources