Install NPM package if not installed using shell script - bash

I want to write a shell script to install NPM package if not already installed.
I can use the command npm info <package-name> version to get information about the package. It gives me the version if it is already there
2.0.0
If it is not there it gives an error.
npm ERR! code E404
npm ERR! 404 Not found :<package>
npm ERR! 404
npm ERR! 404 '<package>' is not in the npm registry.
How can I use this result in a conditional block to do some task depending on it?

I think you're over-complicating things. npm-install already checks if the module is installed and just ignores it if it's already there, so all you need to do is call it:
$ npm install mymodule#2.0.0

Related

EPERM error when running npm install global using Git Bash?

If I use Command Prompt and run it as admin, I get no problems.
But when I use Git Bash, for whatever reason, when I try to install anything globally, I get this error:
npm ERR! code EPERM
npm ERR! syscall mkdir
npm ERR! path C:\Program Files\nodejs\node_modules\.staging
npm ERR! errno -4048
npm ERR! Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\node_modules\.staging'...
When I'm installing packages locally in specific project folders, a plain npm install, it works perfectly. But I've been trying to run npm install -g bower successfully to no avail.
Sure, I can just run cmd as admin, but I was hoping to get to the bottom of this and understand the problem.
I've tried reinstalling Git Bash, reinstalled Node.js, but still didn't make any progress.

Vulcan.js with git bash on windows using powershell

I am using bash on Ubuntu on windows, I open powershell and the run command bash I navigate to the Vulcan-starter repo I cloned. It is a Meteor project. I have installed meteor using the curl command as recommended on Meteor's website. I am using node version 8.11.1 I run npm install and everything installs fine, when I run npm start this is where I get the errors. Here is the error below, and a more detailed log is included in this gist.
MongoDB had an unspecified uncaught exception.
This can be caused by MongoDB being unable to write to a local database.
Check that you have permissions to write to .meteor/local. MongoDB does
not support filesystems like NFS that do not allow file locking.
npm ERR! code ELIFECYCLE
npm ERR! errno 254
npm ERR! Vulcan#1.8.11 start: `meteor --settings settings.json`
npm ERR! Exit status 254
npm ERR!
npm ERR! Failed at the Vulcan#1.8.11 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/anderskitson/.npm/_logs/2018-03-30T21_21_54_469Z-debug.log

Error installing Composer on Ubuntu

I am trying to install Composer on Ubuntu 14.04. I was able to install the prerequisites. When installing composer, I get the following error. How to fix it?
npm install -g composer-cli
npm WARN deprecated fs-promise#1.0.0: Use mz or fs-extra^3.0 with Promise Support
npm WARN deprecated crypto#0.0.3: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.
npm WARN deprecated node-uuid#1.4.8: Use uuid module instead
npm WARN deprecated jade#1.11.0: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated transformers#2.1.0: Deprecated, use jstransformer
npm WARN deprecated nodemailer#2.7.2: All versions below 4.0.1 of Nodemailer are deprecated. See https://nodemailer.com/status/
/root/.nvm/versions/node/v6.11.2/bin/composer -> /root/.nvm/versions/node/v6.11.2/lib/node_modules/composer-cli/cli.js
> hashtable#2.0.2 install /root/.nvm/versions/node/v6.11.2/lib/node_modules/composer-cli/node_modules/hashtable
> node-gyp configure build
sh: 1: node-gyp: Permission denied
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents#1.1.2 (node_modules/composer-cli/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents#1.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! hashtable#2.0.2 install: `node-gyp configure build`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the hashtable#2.0.2 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2017-08-22T16_31_22_412Z-debug.log
So firstly you should not install Hyperledger Composer as 'root'. You need to read the docs here before you proceed https://hyperledger.github.io/composer/installing/development-tools.html
So fundamentally this is an npm issue (in that it causes problems for npm, when you npm install as 'root' or 'sudo' privileges for installing modules).
I suggest you create a non-root user in your Ubuntu system. Then log in as that user. Then install the pre-reqs using the supplied prereqs-ubuntu.sh script from the link above. Then follow the instructions, installing as your non-privileged user.
Normal route to fixing a non-root install npm issue, is one of these shown here https://docs.npmjs.com/getting-started/fixing-npm-permissions
When you install composer modules globally (eg. composer-cli) you should install using a designated, non-root user as mentioned. If there are issues (eg, on Ubuntu with permissions to write/update node directories located in system directories like /usr/local) - one solution (but see link earlier) is perform the npm install to a directory you have access to - rather than resort to root or superuser access, as this is not good practice. Here is what to do to set the npm prefix to a given directory, ...
"npm config set prefix /home/myuser/"
In this case, global binaries are placed in /home/myuser/bin which is in your PATH, and the modules are placed in /home/myuser/lib ...

Unable to run heroku-cli commands - issues with npm

When trying to run heroku fork on Mac OS X Yosemite, I all the sudden am running into critical errors that render the CLI useless. This problem did not occur previously and I believe the CLI may have updated itself and started causing problems.
~ ☽ heroku fork -a oldapp newapp
Installing plugin heroku-fork... npm ERR! Darwin 14.0.0
npm ERR! argv "/Users/Me/.heroku/iojs-v2.0.0-darwin-x64/bin/iojs" "/Users/JJ/.heroku/iojs-v2.0.0-darwin-x64/lib/node_modules/npm/cli.js" "install" "heroku-fork"
npm ERR! node v2.0.0
npm ERR! npm v2.9.0
npm ERR! code ETARGET
npm ERR! notarget No compatible version found: heroku-cli-util#'>=1.9.0 <2.0.0'
npm ERR! notarget Valid install targets:
npm ERR! notarget ["1.0.0","1.0.1","1.1.0","1.2.0","1.3.0","1.4.0","1.5.0","1.7.0","1.8.0","1.8.1"]
npm ERR! notarget
npm ERR! notarget This is most likely not a problem with npm itself.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! notarget
npm ERR! notarget It was specified as a dependency of 'heroku-fork'
npm ERR! notarget
npm ERR! Please include the following file with any support request:
npm ERR! /Users/Me/.heroku/npm-debug.log
ERROR: exit status 1
Usage: heroku COMMAND [--app APP] [command-specific-options]
Help topics, type "heroku help TOPIC" for more details:
heroku version # print the version
heroku plugins # manage plugins
heroku update # update heroku-cli
I've tried removing and reinstalling the heroku cli via: homebrew, the official installer, even the rubygem. Since the error seems to suggest there's an npm problem, I updated npm and all of my npm packages, and was even able to explicitly run npm install -g heroku-cli-util#1.10.0 but none of that has made any difference.
What is going wrong here/how can I fix this? This is a critical issue for me.
I think the cache got stuck somehow, try deleting ~/.heroku and trying again.
EDIT: turns out this was an issue with caching on the Heroku private npm server.

Cannot run npm install browserify

I try to run npm install browserify both locally and globally (-g)
but I always got the follow errors
npm ERR! peerinvalid The package bn.js does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer miller-rabin#1.1.2 wants bn.js#^0.16.0
npm ERR! System Darwin 14.0.0
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "browserify"
npm ERR! cwd /Users/kanitw/Dropbox/_Projects/_idl/_visrec/vegalite
npm ERR! node -v v0.10.24
npm ERR! npm -v 1.3.21
npm ERR! code EPEERINVALID
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/kanitw/Dropbox/_Projects/_idl/_visrec/vegalite/npm-debug.log
npm ERR! not ok code 0
Not sure how to solve it.
(My node version is v0.10.24, I'm on OSX Yosemite)
In order to make the workaround work, you have to
Delete the existing node_modules folder.
npm install miller-rabin#1.1.1 --save-peer
npm install browserify
That works guaranteed.
Had the same issue on Linux. Try running npm update -g
before installing browserify. This has worked for me.
This commit introduced the breaking change: https://github.com/indutny/miller-rabin/commit/bb85f555974587a410a17173f0bc484133b53cb7
The author of the library should fix it, but meanwhile you can:
Delete the existing node_modules folder
npm install miller-rabin#1.1.1 --save-peer
npm install browserify
Recently found this issue on browserify's github.
https://github.com/substack/node-browserify/issues/1049
There is a workaround described.
There are details of a workaround list in the issues on the github page
Error listing
To summarise the solution posted in the issue, you need to install miller-rabin#1.1.1 as a peer-dependency in your own project (npm install miller-rabin#1.1.1 --save-peer) that makes sure the bn.js#0.15 is used rather than the more recent version.
Hope that helps!
Try zipping your existing node_modules and package.json, then delete them.
You may need to 1st generate a new package.json using:
npm init
Then install browserify locally:
npm install browserify
Also, you'll have to install browserify globally:
npm install browserify -g
To zip on CMD or terminal refer to the following article:
How to zip a file using cmd line?

Resources