Provided by: npm_3.5.2-0ubuntu4_all bug

NAME

       npm-faq - Frequently Asked Questions

Where can I find these docs in HTML?

       https://docs.npmjs.com/, or run:

           npm config set viewer browser

       This command will set the npm docs to open in your default web browser rather than man.

It didn´t work.

       Please  provide a little more detail, search for the error via Google https://google.com or StackOverflow
       npm http://stackoverflow.com/search?q=npm to see if another developer has encountered a similar problem.

Why didn´t it work?

       I don´t know yet.

       Try reading the error output first, ensure this is a true npm issue and not a package issue. If  you  are
       having  an  issue  with  a  package  dependency,  please  submit  your  error  to that particular package
       maintainer.

       For any npm issues, try following the instructions, or even retracing your steps. If the issue  continues
       to persist, submit a bug with the steps to reproduce, please include the operating system you are working
       on, along with the error you recieve.

Where does npm put stuff?

       See npm help 5 npm-folders

       tl;dr:

       •   Use the npm root command to see where modules go, and the npm bin command to see where executables go

       •   Global  installs  are  different from local installs. If you install something with the -g flag, then
           its executables go in npm bin -g and its modules go in npm root -g.

How do I install something on my computer in a central location?

       Install it globally by tacking -g or --global to the command. (This is especially important  for  command
       line utilities that need to add their bins to the global system PATH.)

I installed something globally, but I can´t <code>require()</code> it

       Install it locally.

       The  global  install location is a place for command-line utilities to put their bins in the system PATH.
       It´s not for use with require().

       If you require() a module in your code, then that means it´s a dependency, and a part  of  your  program.
       You need to install it locally in your program.

Why can´t npm just put everything in one place, like other package managers?

       Not  every  change is an improvement, but every improvement is a change. This would be like asking git to
       do network IO for every commit. It´s not going to happen, because it´s a terrible idea that  causes  more
       problems than it solves.

       It  is much harder to avoid dependency conflicts without nesting dependencies. This is fundamental to the
       way that npm works, and has proven to be an extremely successful approach. See npm help 5 npm-folders for
       more details.

       If you want a package to be installed in one place, and have all your programs reference the same copy of
       it, then use the npm link command. That´s what it´s for. Install it globally,  then  link  it  into  each
       program that uses it.

Whatever, I really want the old style ´everything global´ style.

       Write  your  own  package  manager.  You  could probably even wrap up npm in a shell script if you really
       wanted to.

       npm will not help you do something that is known to be a bad idea.

Should I check my <code>node_modules</code> folder into git?

       Usually, no. Allow npm to resolve dependencies for your packages.

       For packages you deploy, such as websites and apps, you should use npm shrinkwrap to lock down your  full
       dependency tree:

       https://docs.npmjs.com/cli/shrinkwrap

       If  you  are  paranoid  about  depending  on  the npm ecosystem, you should run a private npm mirror or a
       private cache.

       If you want 100% confidence in being able to reproduce the specific bytes included in a  deployment,  you
       should  use  an  additional  mechanism that can verify contents rather than versions. For example, Amazon
       machine images, DigitalOcean snapshots, Heroku slugs, or simple tarballs.

Is it ´npm´ or ´NPM´ or ´Npm´?

       npm should never be capitalized unless it is being displayed in a location that is  customarily  all-caps
       (such as the title of man pages.)

If ´npm´ is an acronym, why is it never capitalized?

       Contrary  to the belief of many, "npm" is not in fact an abbreviation for "Node Package Manager". It is a
       recursive bacronymic abbreviation for "npm is not an acronym". (If it was "ninaa", then it  would  be  an
       acronym, and thus incorrectly named.)

       "NPM",  however,  is  an  acronym  (more precisely, a capitonym) for the National Association of Pastoral
       Musicians. You can learn more about them at http://npm.org/.

       In software, "NPM" is a Non-Parametric Mapping utility written by Chris Rorden. You can analyze  pictures
       of brains with it. Learn more about the (capitalized) NPM program at http://www.cabiatl.com/mricro/npm/.

       The first seed that eventually grew into this flower was a bash utility named "pm", which was a shortened
       descendent  of  "pkgmakeinst",  a  bash  function  that  was  used to install various different things on
       different platforms, most often using Yahoo´s yinst. If npm was ever an acronym for anything, it was node
       pm or maybe new pm.

       So, in all seriousness, the "npm" project is named after its command-line utility, which was  organically
       selected  to  be easily typed by a right-handed programmer using a US QWERTY keyboard layout, ending with
       the right-ring-finger in a postition to type the - key for flags and other command-line  arguments.  That
       command-line utility is always lower-case, though it starts most sentences it is a part of.

How do I list installed packages?

       npm ls

How do I search for packages?

       npm search

       Arguments are greps. npm search jsdom shows jsdom packages.

How do I update npm?

       npm install npm -g

       You  can  also  update  all  outdated local packages by doing npm update without any arguments, or global
       packages by doing npm update -g.

       Occasionally, the version of npm will progress such that the current version cannot be properly installed
       with the version that you have installed already. (Consider, if  there  is  ever  a  bug  in  the  update
       command.)

       In those cases, you can do this:

           curl https://www.npmjs.com/install.sh | sh

What is a <code>package</code>?

       A package is any of:

       •   a) a folder containing a program described by a package.json file

       •   b) a gzipped tarball containing (a)

       •   c) a url that resolves to (b)

       •   d) a <name>@<version> that is published on the registry with (c)

       •   e) a <name>@<tag> that points to (d)

       •   f) a <name> that has a "latest" tag satisfying (e)

       •   g) a git url that, when cloned, results in (a).

       Even if you never publish your package, you can still get a lot of benefits of using npm if you just want
       to write a node program (a), and perhaps if you also want to be able to easily install it elsewhere after
       packing it up into a tarball (b).

       Git urls can be of the form:

           git://github.com/user/project.git#commit-ish
           git+ssh://user@hostname:project.git#commit-ish
           git+http://user@hostname/project/blah.git#commit-ish
           git+https://user@hostname/project/blah.git#commit-ish

       The  commit-ish  can be any tag, sha, or branch which can be supplied as an argument to git checkout. The
       default is master.

What is a <code>module</code>?

       A module is anything that can be loaded with require() in a Node.js program. The following things are all
       examples of things that can be loaded as modules:

       •   A folder with a package.json file containing a main field.

       •   A folder with an index.js file in it.

       •   A JavaScript file.

       Most npm packages are modules, because they are libraries that you load with require. However, there´s no
       requirement that an npm package be a module! Some only contain an executable command-line interface,  and
       don´t provide a main field for use in Node programs.

       Almost  all  npm  packages  (at  least,  those  that  are Node programs) contain many modules within them
       (because every file they load with require() is a module).

       In the context of a Node program, the module is also the thing that was loaded from a file. For  example,
       in the following program:

           var req = require(´request´)

       we might say that "The variable req refers to the request module".

So, why is it the

       The package.json file defines the package. (See "What is a package?" above.)

       The node_modules folder is the place Node.js looks for modules. (See "What is a module?" above.)

       For  example,  if  you  create  a  file  at  node_modules/foo.js  and then had a program that did var f =
       require(´foo.js´) then it would load the module. However, foo.js is not a "package" in this case, because
       it does not have a package.json.

       Alternatively, if you create a package which does  not  have  an  index.js  or  a  "main"  field  in  the
       package.json  file,  then  it  is  not  a  module. Even if it´s installed in node_modules, it can´t be an
       argument to require().

<code>

       No. This will never happen. This question comes up sometimes, because it seems  silly  from  the  outside
       that  npm  couldn´t  just  be  configured  to put stuff somewhere else, and then npm could load them from
       there. It´s an arbitrary spelling choice, right? What´s the big deal?

       At the time of this writing, the string ´node_modules´ appears 151 times in 53 separate files in npm  and
       node core (excluding tests and documentation).

       Some  of  these  references  are  in  node´s  built-in module loader. Since npm is not involved at all at
       run-time, node itself would have to be configured to know where you´ve decided to stick stuff. Complexity
       hurdle #1. Since the Node module system is locked, this cannot be changed, and is  enough  to  kill  this
       request. But I´ll continue, in deference to your deity´s delicate feelings regarding spelling.

       Many  of  the  others are in dependencies that npm uses, which are not necessarily tightly coupled to npm
       (in the sense that they do not read npm´s configuration files, etc.) Each  of  these  would  have  to  be
       configured to take the name of the node_modules folder as a parameter. Complexity hurdle #2.

       Furthermore,   npm   has   the  ability  to  "bundle"  dependencies  by  adding  the  dep  names  to  the
       "bundledDependencies" list in package.json, which causes  the  folder  to  be  included  in  the  package
       tarball.  What  if the author of a module bundles its dependencies, and they use a different spelling for
       node_modules? npm would have to rename the folder at publish time, and then be smart enough to unpack  it
       using your locally configured name. Complexity hurdle #3.

       Furthermore,  what  happens when you change this name? Fine, it´s easy enough the first time, just rename
       the node_modules folders to ./blergyblerp/ or whatever name you choose. But what about when you change it
       again? npm doesn´t currently track any state about past configuration settings, so this would  be  rather
       difficult  to do properly. It would have to track every previous value for this config, and always accept
       any of them, or else yesterday´s install may be broken tomorrow. Complexity hurdle #4.

       Never going to happen. The folder is named node_modules. It is written indelibly in the Node Way,  handed
       down from the ancient times of Node 0.3.

How do I install node with npm?

       You don´t. Try one of these node version managers:

       Unix:

       •   http://github.com/isaacs/navehttp://github.com/visionmedia/nhttp://github.com/creationix/nvm

       Windows:

       •   http://github.com/marcelklehr/nodisthttps://github.com/coreybutler/nvm-windowshttps://github.com/hakobera/nvmwhttps://github.com/nanjingboy/nvmw

How can I use npm for development?

       See npm help 7 npm-developers and npm help 5 package.json.

       You´ll most likely want to npm link your development folder. That´s awesomely handy.

       To set up your own private registry, check out npm help 7 npm-registry.

Can I list a url as a dependency?

       Yes.  It  should  be a url to a gzipped tarball containing a single folder that has a package.json in its
       root, or a git url. (See "what is a package?" above.)

How do I symlink to a dev folder so I don´t have to keep re-installing?

       See npm help npm-link

The package registry website. What is that exactly?

       See npm help 7 npm-registry.

I forgot my password, and can´t publish. How do I reset it?

       Go to https://npmjs.com/forgot.

I get ECONNREFUSED a lot. What´s up?

       Either the registry is down, or node´s DNS isn´t able to reach out.

       To check if the registry is down, open up https://registry.npmjs.org/ in a web browser.  This  will  also
       tell you if you are just unable to access the internet for some reason.

       If   the  registry  IS  down,  let  us  know  by  emailing  support@npmjs.com  or  posting  an  issue  at
       https://github.com/npm/npm/issues. If it´s down for the world (and not just on your local  network)  then
       we´re probably already being pinged about it.

       You can also often get a faster response by visiting the #npm channel on Freenode IRC.

Why no namespaces?

       npm  has only one global namespace. If you want to namespace your own packages, you may: simply use the -
       character to separate the names or use scoped packages. npm is a mostly anarchic  system.  There  is  not
       sufficient need to impose namespace rules on everyone.

       As  of  2.0,  npm supports scoped packages, which allow you to publish a group of related modules without
       worrying about name collisions.

       Every npm user owns the scope associated with their username. For example, the user named  npm  owns  the
       scope  @npm.  Scoped packages are published inside a scope by naming them as if they were files under the
       scope directory, e.g., by setting name in package.json to @npm/npm.

       Scoped packages are supported by the public npm registry. The npm  client  is  backwards-compatible  with
       un-scoped registries, so it can be used to work with scoped and un-scoped registries at the same time.

       Unscoped packages can only depend on other unscoped packages. Scoped packages can depend on packages from
       their own scope, a different scope, or the public registry (unscoped).

       For the current documentation of scoped packages, see https://docs.npmjs.com/misc/scope

       References:

       1.  For   the   reasoning   behind   the   "one   global   namespace",   please   see   this  discussion:
           https://github.com/npm/npm/issues/798 (TL;DR: It doesn´t actually make things better,  and  can  make
           them worse.)

       2.  For   the  pre-implementation  discussion  of  the  scoped  package  feature,  see  this  discussion:
           https://github.com/npm/npm/issues/5239

Who does npm?

       npm was originally written by Isaac Z. Schlueter, and many others have contributed to it,  some  of  them
       quite substantially.

       The  npm  open  source  project,  The  npm  Registry, and the community website https://www.npmjs.com are
       maintained and operated by the good folks at npm, Inc. http://www.npmjs.com

I have a question or request not addressed here. Where should I put it?

       Post an issue on the github project:

       •   https://github.com/npm/npm/issues

Why does npm hate me?

       npm is not capable of hatred. It loves everyone, especially you.

SEE ALSO

       •   npm help npm

       •   npm help 7 developers

       •   npm help 5 package.json

       •   npm help config

       •   npm help 7 config

       •   npm help 5 npmrc

       •   npm help 7 config

       •   npm help 5 folders

                                                  December 2015                                       NPM-FAQ(7)