(window.webpackJsonp=window.webpackJsonp||[]).push([[2237],{2646:function(a,e,s){"use strict";s.r(e);var t=s(31),n=Object(t.a)({},(function(){var a=this,e=a.$createElement,s=a._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"npm"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#npm"}},[a._v("#")]),a._v(" npm")]),a._v(" "),s("p",[a._v("Node Package Manager (npm) provides following two main functionalities: Online repositories for node.js packages/modules which are searchable on search.nodejs.org. Command line utility to install Node.js packages, do version management and dependency management of Node.js packages.")]),a._v(" "),s("h2",{attrs:{id:"installing-packages"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-packages"}},[a._v("#")]),a._v(" Installing packages")]),a._v(" "),s("h3",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[a._v("#")]),a._v(" Introduction")]),a._v(" "),s("p",[a._v("Package is a term used by npm to denote tools that developers can use for their projects. This includes everything from libraries and frameworks such as jQuery and AngularJS to task runners such as Gulp.js. The packages will come in a folder typically called "),s("code",[a._v("node_modules")]),a._v(", which will also contain a "),s("code",[a._v("package.json")]),a._v(" file. This file contains information regarding all the packages including any dependencies, which are additional modules needed to use a particular package.")]),a._v(" "),s("p",[a._v("Npm uses the command line to both install and manage packages, so users attempting to use npm should be familiar with basic commands on their operating system i.e.: traversing directories as well as being able to see the contents of directories.")]),a._v(" "),s("h3",{attrs:{id:"installing-npm"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-npm"}},[a._v("#")]),a._v(" Installing NPM")]),a._v(" "),s("p",[a._v("Note that in order to install packages, you must have NPM installed.")]),a._v(" "),s("p",[a._v("The recommended way to install NPM is to use one of the installers from the "),s("a",{attrs:{href:"https://nodejs.org/en/download/",target:"_blank",rel:"noopener noreferrer"}},[a._v("Node.js download page"),s("OutboundLink")],1),a._v(". You can check to see if you already have node.js installed by running either the "),s("code",[a._v("npm -v")]),a._v(" or the "),s("code",[a._v("npm version")]),a._v(" command.")]),a._v(" "),s("p",[a._v("After installing NPM via the Node.js installer, be sure to check for updates. This is because NPM gets updated more frequently than the Node.js installer. To check for updates run the following command:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install npm@latest "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("g\n\n")])])]),s("h3",{attrs:{id:"how-to-install-packages"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#how-to-install-packages"}},[a._v("#")]),a._v(" How to install packages")]),a._v(" "),s("p",[a._v("To install one or more packages use the following:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n# or\nnpm i "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v("\n\n# e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("g"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" to install lodash and express\nnpm install lodash express\n\n")])])]),s("blockquote"),a._v(" "),s("p",[s("strong",[a._v("Note")]),a._v(": This will install the package in the directory that the command line is currently in, thus it is important to check whether the appropriate directory has been chosen")]),a._v(" "),s("p",[a._v("If you already have a "),s("code",[a._v("package.json")]),a._v(" file in your current working directory and dependencies are defined in it, then "),s("code",[a._v("npm install")]),a._v(" will automatically resolve and install all dependencies listed in the file. You can also use the shorthand version of the "),s("code",[a._v("npm install")]),a._v(" command which is: "),s("code",[a._v("npm i")])]),a._v(" "),s("p",[a._v("If you want to install a specific version of a package use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("version"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("g"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" to install version "),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("4.11")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v(".1")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("of")]),a._v(" the "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" lodash\nnpm install lodash@"),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("4.11")]),s("span",{pre:!0,attrs:{class:"token number"}},[a._v(".1")]),a._v("\n\n")])])]),s("p",[a._v("If you want to install a version which matches a specific version range use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("version range"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("g"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" to install a version which matches "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"version >= 4.10.1"')]),a._v(" and "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"version < 4.11.1"')]),a._v("\n# "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("of")]),a._v(" the "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" lodash\nnpm install lodash@"),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('">=4.10.1 <4.11.1"')]),a._v("\n\n")])])]),s("p",[a._v("If you want to install the latest version use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("@latest\n\n")])])]),s("p",[a._v("The above commands will search for packages in the central "),s("code",[a._v("npm")]),a._v(" repository at "),s("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[a._v("npmjs.com"),s("OutboundLink")],1),a._v(". If you are not looking to install from the "),s("code",[a._v("npm")]),a._v(" registry, other options are supported, such as:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("# packages distributed "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("as")]),a._v(" a tarball\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("tarball file"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("tarball url"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# packages available locally\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("local path"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# packages available "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("as")]),a._v(" a git repository\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("git remote url"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# packages available on GitHub\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("username"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("repository"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# packages available "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("as")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("gist")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("need a "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\nnpm install gist"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("gist"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("id"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# packages from a specific repository\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("registry"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("myreg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("mycompany"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("com "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# packages from a related group "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("of")]),a._v(" packages \n# See npm scope\nnpm install @"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("scope"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("version"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n\n# Scoping is useful "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" separating "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("private")]),a._v(" packages hosted on "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("private")]),a._v(" registry from\n# "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("public")]),a._v(" ones by setting registry "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" specific scope\nnpm config set @mycompany"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v("registry http"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("myreg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("mycompany"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("com\nnpm install @mycompany"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("Usually, modules will be installed locally in a folder named "),s("code",[a._v("node_modules")]),a._v(", which can be found in your current working directory. This is the directory "),s("code",[a._v("require()")]),a._v(" will use to load modules in order to make them available to you.")]),a._v(" "),s("p",[a._v("If you already created a "),s("code",[a._v("package.json")]),a._v(" file, you can use the "),s("code",[a._v("--save")]),a._v(" (shorthand "),s("code",[a._v("-S")]),a._v(") option or one of its variants to automatically add the installed package to your "),s("code",[a._v("package.json")]),a._v(" as a dependency. If someone else installs your package, "),s("code",[a._v("npm")]),a._v(" will automatically read dependencies from the "),s("code",[a._v("package.json")]),a._v(" file and install the listed versions. Note that you can still add and manage your dependencies by editing the file later, so it's usually a good idea to keep track of dependencies, for example using:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" # Install dependencies \n# or\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("S")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" # shortcut version "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save \n# or\nnpm i "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("S")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("In order to install packages and save them only if they are needed for development, not for running them, not if they are needed for the application to run, follow the following command:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("dev "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" # Install dependencies "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("for")]),a._v(" development purposes\n# or\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("D")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" # shortcut version "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("dev\n# or\nnpm i "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("D")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("h3",{attrs:{id:"installing-dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-dependencies"}},[a._v("#")]),a._v(" Installing dependencies")]),a._v(" "),s("p",[a._v("Some modules do not only provide a library for you to use, but they also provide one or more binaries which are intended to be used via the command line. Although you can still install those packages locally, it is often preferred to install them globally so the command-line tools can be enabled. In that case, "),s("code",[a._v("npm")]),a._v(" will automatically link the binaries to appropriate paths (e.g. "),s("code",[a._v("/usr/local/bin/")]),a._v(") so they can be used from the command line. To install a package globally, use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("global "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n# or\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("g "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n# or\nnpm i "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("g "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n# e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("g"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" to install the grunt command line tool\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("g grunt"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("cli\n\n")])])]),s("p",[a._v("If you want to see a list of all the installed packages and their associated versions in the current workspace, use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm list\nnpm list "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("Adding an optional name argument can check the version of a specific package.")]),a._v(" "),s("p",[s("strong",[a._v("Note:")]),a._v(" If you run into permission issues while trying to install an npm module globally, resist the temptation to issue a "),s("code",[a._v("sudo npm install -g ...")]),a._v(" to overcome the issue. Granting third-party scripts to run on your system with elevated privileges is dangerous. The permission issue might mean that you have an issue with the way "),s("code",[a._v("npm")]),a._v(" itself was installed. If you're interested in installing Node in sandboxed user environments, you might want to try using "),s("a",{attrs:{href:"https://github.com/creationix/nvm",target:"_blank",rel:"noopener noreferrer"}},[a._v("nvm"),s("OutboundLink")],1),a._v(".")]),a._v(" "),s("p",[a._v("If you have build tools, or other development-only dependencies (e.g. Grunt), you might not want to have them bundled with the application you deploy. If that's the case, you'll want to have it as a development dependency, which is listed in the "),s("code",[a._v("package.json")]),a._v(" under "),s("code",[a._v("devDependencies")]),a._v(". To install a package as a development-only dependency, use "),s("code",[a._v("--save-dev")]),a._v(" (or "),s("code",[a._v("-D")]),a._v(").")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("dev "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Install development dependencies which is not included in production ")]),a._v("\n# or\nnpm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("D")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("You will see that the package is then added to the "),s("code",[a._v("devDependencies")]),a._v(" of your "),s("code",[a._v("package.json")]),a._v(".")]),a._v(" "),s("p",[a._v("To install dependencies of a downloaded/cloned node.js project, you can simply use")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install\n# or\nnpm i\n\n")])])]),s("p",[a._v("npm will automatically read the dependencies from "),s("code",[a._v("package.json")]),a._v(" and install them.")]),a._v(" "),s("h3",{attrs:{id:"npm-behind-a-proxy-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#npm-behind-a-proxy-server"}},[a._v("#")]),a._v(" NPM Behind A Proxy Server")]),a._v(" "),s("p",[a._v("If your internet access is through a proxy server, you might need to modify npm install commands that access remote repositories. npm uses a configuration file which can be updated via command line:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm config "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("set")]),a._v("\n\n")])])]),s("p",[a._v("You can locate your proxy settings from your browser's settings panel. Once you have obtained the proxy settings (server URL, port, username and password); you need to configure your npm configurations as follows.")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("$ npm config "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("set")]),a._v(" proxy http"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("username"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("password"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("proxy"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("server"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("url"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("port"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n$ npm config "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("set")]),a._v(" https"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("proxy http"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("username"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("password"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("proxy"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("server"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("url"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("port"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[s("code",[a._v("username")]),a._v(", "),s("code",[a._v("password")]),a._v(", "),s("code",[a._v("port")]),a._v(" fields are optional. Once you have set these, your "),s("code",[a._v("npm install")]),a._v(", "),s("code",[a._v("npm i -g")]),a._v(" etc. would work properly.")]),a._v(" "),s("h2",{attrs:{id:"uninstalling-packages"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uninstalling-packages"}},[a._v("#")]),a._v(" Uninstalling packages")]),a._v(" "),s("p",[a._v("To uninstall one or more locally installed packages, use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("The uninstall command for npm has five aliases that can also be used:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm remove "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm rm "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm r "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\nnpm unlink "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm un "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("If you would like to remove the package from the "),s("code",[a._v("package.json")]),a._v(" file as part of the uninstallation, use the "),s("code",[a._v("--save")]),a._v(" flag (shorthand: "),s("code",[a._v("-S")]),a._v("):")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("S")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("For a development dependency, use the "),s("code",[a._v("--save-dev")]),a._v(" flag (shorthand: "),s("code",[a._v("-D")]),a._v("):")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("dev "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("D")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("For an optional dependency, use the "),s("code",[a._v("--save-optional")]),a._v(" flag (shorthand: "),s("code",[a._v("-O")]),a._v("):")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("optional "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nnpm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("O")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("For packages that are installed globally use the "),s("code",[a._v("--global")]),a._v(" flag (shorthand: "),s("code",[a._v("-g")]),a._v("):")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm uninstall "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("g "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),a._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("h2",{attrs:{id:"setting-up-a-package-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-a-package-configuration"}},[a._v("#")]),a._v(" Setting up a package configuration")]),a._v(" "),s("p",[a._v("Node.js package configurations are contained in a file called "),s("code",[a._v("package.json")]),a._v(" that you can find at the root of each project. You can setup a brand new configuration file by calling:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm init\n\n")])])]),s("p",[a._v("That will try to read the current working directory for Git repository information (if it exists) and environment variables to try and autocomplete some of the placeholder values for you. Otherwise, it will provide an input dialog for the basic options.")]),a._v(" "),s("p",[a._v("If you'd like to create a "),s("code",[a._v("package.json")]),a._v(" with default values use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm init "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("yes\n# or\nnpm init "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("y \n\n")])])]),s("p",[a._v("If you're creating a "),s("code",[a._v("package.json")]),a._v(" for a project that you are not going to be publishing as an npm package (i.e. solely for the purpose of rounding up your dependencies), you can convey this intent in your "),s("code",[a._v("package.json")]),a._v(" file:")]),a._v(" "),s("ol",[s("li",[a._v("Optionally set the "),s("code",[a._v("private")]),a._v(" property to true to prevent accidental publishing.")]),a._v(" "),s("li",[a._v("Optionally set the "),s("code",[a._v("license")]),a._v(' property to "UNLICENSED" to deny others the right to use your package.')])]),a._v(" "),s("p",[a._v("To install a package and automatically save it to your "),s("code",[a._v("package.json")]),a._v(", use:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[a._v("npm install "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("--")]),a._v("save "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("package")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n\n")])])]),s("p",[a._v("The package and associated metadata (such as the package version) will appear in your dependencies. If you save if as a development dependency (using "),s("code",[a._v("--save-dev")]),a._v("), the package will instead appear in your "),s("code",[a._v("devDependencies")]),a._v(".")]),a._v(" "),s("p",[a._v("With this bare-bones "),s("code",[a._v("package.json")]),a._v(", you will encounter warning messages when installing or upgrading packages, telling you that you are missing a description and the repository field. While it is safe to ignore these messages, you can get rid of them by opening the package.json in any text editor and adding the following lines to the JSON object:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"No description"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"repository"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"private"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\n")])])]),s("h2",{attrs:{id:"running-scripts"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#running-scripts"}},[a._v("#")]),a._v(" Running scripts")]),a._v(" "),s("p",[a._v("You may define scripts in your "),s("code",[a._v("package.json")]),a._v(", for example:")]),a._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"your-package"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"license"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"ISC"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"dependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"echo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"echo hello!"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n\n")])])]),s("p",[a._v("To run the "),s("code",[a._v("echo")]),a._v(" script, run "),s("code",[a._v("npm run echo")]),a._v(" from the command line. Arbitrary scripts, such as "),s("code",[a._v("echo")]),a._v(" above, have to be be run with "),s("code",[a._v("npm run