Internet Explorer is no longer supported. Many things will still work, but your experience will be degraded and some things won't function. Please use a modern browser such as Edge, Chrome, or Firefox.

HOWTO: Publish npm Packages to a Private Registry in ProGet

view on GitHub

ProGet lets you easily set up private registries for your npm packages, so you can publish, store, and share them internally.

This article will show you how to create a "Feed" in ProGet to act as a private npm package Registry. We'll also look at how to create, publish, and install packages from this feed.

Step 1: Create a New Feed

First, we will create a feed to host your npm packages. Start by selecting "Feeds" and "Create New Feed". Next, select "npm Packages".

Then select "No Connectors (Private packages only)" as we will be creating a private feed. From here, we will give our feed a name. For this article, we will call it internal-npm, and then click "Create Feed".

We are then presented with several options. This relate to ProGet's Vulnerability Scanning and Blocking features, however they are only for users looking to use third party packages. Leave these boxes unchecked, and select [Set Feed Features]. You will then be redirected to your new internal-npm feed, currently empty.

Step 2: Build Your Package

To create a package, navigate to the directory you wish to create it in and initialize a new package.json scoped to the namespace @my-organization by running running the npm init command:

$ npm init --scope=@my-organization

For Yarn, the command is similar:

$ yarn init --scope=@my-organization

Note: if you do not want to scope your package, omit --scope=@my-organization.

You will be asked for details of the project name, version, etc. After this you will need the URL of your internal-npm feed, which can be found on the feed page:

Once you have the URL, edit your package.json and add a publishConfig field, adding the internal-npm URL. This will also scope the package to the namespace @my-organization:

{
  "name": "@my-organization/npm-hello-world",
  "version": "1.0.0",
  "description": "Simple Hello World",
  "main": "index.js",
  "publishConfig": {
    "@my-organization:registry": "https:/proget.corp.local/npm/internal-npm/"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Inedo",
  "license": "MIT",
  "dependencies": {
    "npm-hello-world": "^1.0.0"
  }
}

If you do not want to add a scope to your package, you can edit the name and publishConfig fields as follows:

 "name": "npm-hello-world",
...
  "publishConfig": {
    "registry": "https:/proget.corp.local/npm/internal-npm/"
  },

Step 3: Authenticate to your npm Feed

Next you will need to authenticate to your internal-npm feed creating an _auth token and then configuring it in your npm client.

Step 4: Publish Your Package to ProGet

To publish your package to your internal-npm feed, you will need to run the npm publish:

$ npm publish --registry=https://«proget-url»/npm/internal-npm/ 

Or in Yarn using the yarn publish command:

$ yarn publish --registry=https://«proget-url»/npm/internal-npm/ 

Your package should then be uploaded to your internal-npm feed:

Step 5: Add the Feed to npm Clients

To install packages from the internal-npm feed, you'll need to add it as a source in your npm client using npm config:

$ npm config set registry http://«proget-url»/npm/«feed-name»

Or in Yarn using yarn config:

$ yarn config set registry http://«proget-url»/npm/«feed-name»

You can confirm that the feed has been set correctly by using npm get registry for npm, yarn config get registry for Yarn.