A package.json file, usually present in the project root, contains metadata about your app or module as well as the list of dependencies to install from npm when running npm install.

To initialize a package.json type npm init in your command prompt.

To create a package.json with default values use:

npm init --yes
# or
npm init -y

To install a package and save it to package.json use:

npm install {package name} --save

You can also use the shorthand notation:

npm i -S {package name}

NPM aliases -S to --save and -D to --save-dev to save in your production or development dependencies respectively.

The package will appear in your dependencies; if you use --save-dev instead of --save, the package will appear in your devDependencies.

Important properties of package.json:

{
  "name": "module-name",
  "version": "10.3.1",
  "description": "An example module to illustrate the usage of a package.json",
  "author": "Your Name <[email protected]>",
  "contributors": [{
    "name": "Foo Bar",
    "email": "[email protected]"
  }],
  "bin": {
    "module-name": "./bin/module-name"
  },
  "scripts": {
    "test": "vows --spec --isolate",
    "start": "node index.js",
    "predeploy": "echo About to deploy",
    "postdeploy": "echo Deployed",
    "prepublish": "coffee --bare --compile --output lib/foo src/foo/*.coffee"
  },
  "main": "lib/foo.js",
  "repository": {
    "type": "git",
    "url": "<https://github.com/username/repo>"
  },
  "bugs": {
    "url": "<https://github.com/username/issues>"
  },
  "keywords": [
    "example"
  ],
  "dependencies": {
    "express": "4.2.x"
  },
  "devDependencies": {
    "assume": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  },
  "peerDependencies": {
    "moment": ">2.0.0"
  },
  "preferGlobal": true,
  "private": true,
  "publishConfig": {
    "registry": "<https://your-private-hosted-npm.registry.domain.com>"
  },
  "subdomain": "foobar",
  "analyze": true,
  "license": "MIT",
  "files": [
    "lib/foo.js"
  ]
}

Information about some important properties:

name

The unique name of your package and should be down in lowercase. This property is required and your package will not install without it.

  1. The name must be less than or equal to 214 characters.
  2. The name can’t start with a dot or an underscore.
  3. New packages must not have uppercase letters in the name.
version

The version of the package is specified by Semantic Versioning (semver). Which assumes that a version number is written as MAJOR.MINOR.PATCH and you increment the: