Reputation: 41587
I wrote a module which I published to npm a moment ago (https://npmjs.org/package/wisp)
So it installs fine from the command line:
$ npm i -g wisp
However, when I run it from the command line, I keep getting an error that optimist isn't installed:
$ wisp
Error: Cannot find module 'optimist'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
at Module._compile (module.js:449:26)
at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)
However, I have specified in package.json as a dependancy:
{
"name": "wisp",
"author": "Brendan Scarvell <[email protected]>",
"version": "0.1.0",
"description": "Global nodejs file server",
"dependencies": {
"optimist": "~0.3.4"
},
"repository": "git://github.com/tehlulz/wisp",
"bin": {
"wisp" : "./wisp"
}
}
Does anyone know what to do to get this running? I know its to do with the bin part adding the executable to bin and the node_modules in that directory being empty. No idea how to resolve this.
Upvotes: 248
Views: 374845
Reputation: 1
As mentioned elsewhere, the solution is to bake into your image,
NODE_PATH=/usr/local/lib/node_modules/
I've also opened up an issue upstream with npm
apk so this gets set
Upvotes: 0
Reputation: 409
$ vim /etc/profile.d/nodejs.sh
export NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
Upvotes: 3
Reputation: 720
Faced the same issue and got it resolved by adding the below line in my zshrc. Based on your shell you can try adding in your rc file, for bash and zsh - bashrc/zshrc files present in your home location.
export NODE_PATH="/usr/local/lib/node_modules"
To directly add in zshrc file, run this command
echo 'export NODE_PATH="/usr/local/lib/node_modules"' >> ~/.zshrc
Upvotes: 0
Reputation: 31237
The following generic fix would for any module. For example with request-promise
.
Replace
npm install request-promise --global
With
npm install request-promise --cli
worked (source) and also for globals
and inherits
Also, try setting the environment variable
NODE_PATH=%AppData%\npm\node_modules
Upvotes: 16
Reputation: 21
I have just met this problem of the axios
module.
Then I tried this: run rm -rf node_modules
and yarn
.
And it works.
Upvotes: 2
Reputation: 836
I had to add C:\Users\{Username}\AppData\Roaming\npm to my env variables and then i could install stuff.
Upvotes: 0
Reputation: 121
For Mac User's It's Best use the manual installation:
To minimize the chance of permissions errors, you can configure npm to use a different directory. In this example, it will be a hidden directory on your home folder.
Back-up your computer before you start.
Make a directory for global installations:
mkdir ~/.npm-global
Configure npm to use the new directory path:
npm config set prefix '~/.npm-global'
Open or create a ~/.profile file and add this line:
export PATH=~/.npm-global/bin:$PATH
Back on the command line, update your system variables:
source ~/.profile
Test: Download a package globally without using sudo.
npm install -g jshint
Instead of steps 2-4, you can use the corresponding ENV variable (e.g. if you don't want to modify ~/.profile):
NPM_CONFIG_PREFIX=~/.npm-global
Reference : https://docs.npmjs.com/getting-started/fixing-npm-permissions
Upvotes: 2
Reputation: 20065
I got this error Error: Cannot find module 'number-is-nan'
whereas the module actually exists. It was due to a bad/incomplete Node.js installation.
For Windows , as other answers suggest it, you need a clean Node installation :
npm
and npm_cache
in C:\Users\user\AppData\Roaming
npm init
or (npm init --yes
for default config)NODE_PATH
. This path is where your packages are installed. It's probably something likeNODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
npm
should work fineNote :
Try the last points before reinstalling Node.js, it could save you some time and avoid to re-install all your packages.
Upvotes: 2
Reputation: 3092
I had the same error as the OP, but digging through the logs I could see sh: node: command not found
.
It turns out that the /usr/bin/node program (symlink) is no longer installed with apt install nodejs
. Once symlinked /usr/bin/node' to
nodejs,
npm install -g @angular/cli` succeeded.
The proper way to install this on debian is apt install nodejs-legacy
.
Upvotes: 0
Reputation: 31
I did this in simple way...
npm install --global --verbose protractor
works fine for me.
Hope this helps you....
Upvotes: 2
Reputation: 91
In my case both node
and npm
were in same path (/usr/bin
). The NODE_PATH
was empty, so the npm
placed the global modules into /usr/lib/node_modules
where require(...)
successfully find them.
The only exception was the npm
module, which came with the nodejs package. Since I'm using 64 bit system, it was placed into /usr/lib64/node_modules
. This is not where require(...) searches in case of empty NODE_PATH
and node started from /usr/bin
. So I had two options:
/usr/lib64/node_modules/npm
to /usr/lib/node_modules/npm
/usr/lib/node_modules/*
to /usr/lib64/node_modules/
and set NODE_PATH=/usr/lib64/node_modules
Both worked. I'm using OpenSUSE 42.1 and the nodejs package from updates repository. Version is 4.4.5.
Upvotes: 1
Reputation: 33
For Windows, from Nodejs cannot find installed module on Windows? what worked for me is running npm link as in
npm link wisp
Upvotes: 2
Reputation: 1513
On windows if you just did a clean install and you get this you need blow away your npm cache in \AppData\Roaming
Upvotes: 3
Reputation: 383
For some (like me) that nothing else worked, try this:
brew cleanup
brew link node
brew uninstall node
brew install node
Hope it helps someone :)
Upvotes: 11
Reputation: 5701
Had the same problem on one of the test servers running Ubuntu
under root
. Then created a new user using useradd -m myuser
and installed everything (nvm
, node
, packages) as myuser
. Now it's working fine.
Upvotes: 1
Reputation: 1779
I got the "optimist" module error and I just did "npm install" to resolve it. went past that error.
https://github.com/mbloch/mapshaper/issues/12
Upvotes: 8
Reputation: 673
add this to beginning of prog(mac):
module.paths.push('/usr/local/lib/node_modules');
Upvotes: 52
Reputation: 1447
By default node does not look inside the /usr/local/lib/node_module for loading global modules. Refer the module loading explained in http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
So either you have to 1)add the /usr/local/lib/node_module to NODE_PATH and export it or 2)copy the installed node modules to /usr/local/lib/node . (As explained in the link for loading module node will search in this path and will work)
Upvotes: 17
Reputation: 7461
For anyone else running into this, I had this problem due to my npm
installing into a location that's not on my NODE_PATH
.
[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH
My NODE_PATH was empty, and running npm install --global --verbose promised-io
showed that it was installing into /opt/lib/node_modules/promised-io
:
[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli '/opt/bin/npm',
npm verb cli 'install',
npm verb cli '--global',
npm verb cli '--verbose',
npm verb cli 'promised-io' ]
npm info using [email protected]
npm info using [email protected]
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]
My script fails on require('promised-io/promise')
:
[neek@uberneek project]$ node buildscripts/stringsmerge.js
module.js:340
throw err;
^
Error: Cannot find module 'promised-io/promise'
at Function.Module._resolveFilename (module.js:338:15)
I probably installed node and npm from source using configure --prefix=/opt
. I've no idea why this has made them incapable of finding installed modules. The fix for now is to point NODE_PATH at the right directory:
export NODE_PATH=/opt/lib/node_modules
My require('promised-io/promise')
now succeeds.
Upvotes: 417