How to Create an NPM Package

Intro

This is a quick guide to creating a Node.js package for npm. Full package.json documentation available from npmjs.com.

Start a package

npm init

This will prompt you for some things like name and version, then generate a package.json in your current directory. For license, you can use GPL-3.0 for GNU General Public License v3.

Add extras

Full list of options at package.json documentation.

Dependencies

Add run-time and development only dependencies.

npm install --save something-needed-to-run
npm install --save-dev something-only-for-dev

Run scripts

Run scripts can be run with npm run <script_name>. They are shell commands that run in your system shell (e.g. bash)

  "scripts": {
    "build": "tsc",
    "clean": "rm lib/*",
    "start": "npx nodemon server.js"
  },

Static files

Add any other supporting files like static images.

  "files": [
    "lib/**/*"
  ],

Bin executables

If you have any commands you want to be able to invoke directly, like a regular executable, you want to add a bin entry. Bin executables get launch scripts created automatically so you can run them directly.

  "bin": {
    "myprog": "bin/myprog.js"
  },

This would run with myprog or node_modules/.bin/myprog in the system shell.

Git repo

  "repository": {
    "type": "git",
    "url": "https://github.com/Me/Project.git"
  },

Example package.json

The package.json will look something like this:

{
  "name": "myproject",
  "version": "1.0.0",
  "description": "test only",
  "author": "",
  "license": "GPL-3.0",
  "repository": {
    "type": "git",
    "url": "https://github.com/Me/Project.git"
  },
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "bin": {
    "myprog": "bin/myprog.js"
  },
  "files": [
    "lib/**/*"
  ],
  "devDependencies": {
    "something": "^4.4.0"
  },
  "dependencies": {
    "something": "^4.17.2"
  }
}

Uploading to npmjs.org

First, login. If it prompts you for 2-factor code from your authenticator app, it likely just sent you an email with the code. After logging in, it stores a token in ~/.npmrc.

npm login  # Stores token in ~/.npmrc

You only need to login once, but you need to push anytime there are changes and you increment the version number.

npm publish

Installing from npmjs.org

Install the package using the same name you published it under.

For example:

npm install mypackage

References

Advertisement