<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Verdaccio</title>
    <description>The latest articles on DEV Community by Verdaccio (@verdaccio).</description>
    <link>https://dev.to/verdaccio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F494%2F34c523f1-115a-4114-a3bb-bad494501115.png</url>
      <title>DEV Community: Verdaccio</title>
      <link>https://dev.to/verdaccio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/verdaccio"/>
    <language>en</language>
    <item>
      <title>How to use Verdaccio with GitHub registry</title>
      <dc:creator>Juan Picado</dc:creator>
      <pubDate>Sun, 22 Mar 2020 14:50:54 +0000</pubDate>
      <link>https://dev.to/verdaccio/how-to-use-verdaccio-with-github-registry-2ejj</link>
      <guid>https://dev.to/verdaccio/how-to-use-verdaccio-with-github-registry-2ejj</guid>
      <description>&lt;p&gt;I've been asked for this couple of times and I want to share how you can achieve a seamless integration GitHub with &lt;a href="https://verdaccio.org/" rel="noopener noreferrer"&gt;Verdaccio&lt;/a&gt;. Node.js package managers only allow using one registry when you are running an eg: &lt;code&gt;npm install&lt;/code&gt; unless you modify the &lt;code&gt;.npmrc&lt;/code&gt; and add some specific configuration, but frankly, we can do better using a &lt;strong&gt;proxy&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generating the Token at GitHub
&lt;/h3&gt;

&lt;p&gt;First of all, we need to understand the GitHub registry is not a conventional registry, it does not support all &lt;code&gt;npm&lt;/code&gt; commands you are get used to (eg: &lt;code&gt;npm token&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;I'd recommend you read first the &lt;a href="https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-npm-for-use-with-github-packages" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; at GitHub how to use packages.&lt;/p&gt;

&lt;p&gt;Once you have set up and created a &lt;strong&gt;personal token&lt;/strong&gt; in their User Interface (remember you cannot use &lt;code&gt;npm adduser&lt;/code&gt;). Copy the token from the website and proceed to log in to your terminal.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ npm login --registry=https://npm.pkg.github.com
&amp;gt; Username: USERNAME
&amp;gt; Password: TOKEN


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The last thing is recovering the token generated by the GitHub registry in the &lt;code&gt;~/.npmrc&lt;/code&gt; file and find the line to verify npm you can use &lt;code&gt;npm&lt;/code&gt; commands against GitHub registry.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

//npm.pkg.github.com/:_authToken=TOKEN{% raw %}`.
```

One optional step is to publish a package, I have already one published one for my example below.

&amp;gt; This step is required if you have not published packages, otherwise, you don't need to log in, just copy the token.

Great, you have a **token** and that's all you need for *Verdaccio*.

### Installing Verdaccio

Let's imagine you don't know anything about [Verdaccio](https://verdaccio.org/). So here is what it does.

**Verdaccio is a lightweight private proxy registry build in Node.js** 

and with straightforward installation, with no dependencies aside to have installed Node.js.

```
npm install --global verdaccio
```
to run *Verdaccio* just run in your terminal,

```
➜ verdaccio
 warn --- config file  - /Users/user/.config/verdaccio/config.yaml
 warn --- Verdaccio started
 warn --- http address - http://localhost:4873/ - verdaccio/4.5.0
```
for further information I'd recommend read our [documentation](https://verdaccio.org/docs/en/installation).

For this article, we will focus on the **proxy**, which is the most powerful and popular feature by far.

### Hooking the GitHub registry

First of all, you need a published package in the registry, here is mine and as you can see **GitHub only support scoped packages**.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/oydvxn9kuve9ttcsoypq.png)

This example is about how to fetch packages from **npmjs** and **GitHub** registries at the same time without modify the `.npmrc` file.

#### Uplinks

Open the verdaccio configuration file (eg: `/Users/user/.config/verdaccio/config.yaml`) and update the `uplinks` section adding a new registry.

```
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
  github:
    url: https://npm.pkg.github.com
    auth:
      type: bearer
      token: xxxx
```
For demonstration purposes let's copy the token in the example above, populate the config file with `token` is not the best approach, I recommend using *environment variables* with **auth** property, read more about it [here](https://verdaccio.org/docs/en/uplinks#auth-property).

#### Package Access

To install packages, we need the list of dependencies in your `package.json` file. Here is my example:

```
  "dependencies": {
    "@types/babel__parser": "7.1.1",
    "@juanpicado/registry_test": "*",
    "lodash": "*"
  }
```

If you recall, I've published a package in my GitHub profile named `registry_test`, but GitHub requires to access my public package scoped with my user name, that would be `@juanpicado/registry_test`. 


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3zdrvka3jh7330q5lm7h.png)

To make it more interesting, I also added a random published public package published by another user named `@types/babel__parser`.

The next step is setting up the **package access** section:

```
packages:
  '@juanpicado/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: github
  '@types/babel__parser':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: github 
  '@*/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    proxy: npmjs
```

As we describe in the packages [documentation](https://verdaccio.org/docs/en/packages#usage), the **order is important**. Define the scoped packages you want to match on top of `'@*/*'` and define the `proxy` properties to the name used in the uplink section, for our example would be `proxy: github`.

With such configuration, *Verdaccio* will be able to route the request to the right remote.

```
 http --&amp;gt; 200, req: 'GET https://registry.npmjs.org/lodash' (streaming)
 http --&amp;gt; 200, req: 'GET https://registry.npmjs.org/lodash', bytes: 0/194928
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /lodash', bytes: 0/17599
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /lodash', bytes: 0/17599
 http --&amp;gt; 200, req: 'GET https://npm.pkg.github.com/@types%2Fbabel__parser' (streaming)
 http --&amp;gt; 200, req: 'GET https://npm.pkg.github.com/@types%2Fbabel__parser', bytes: 0/1113
 http --&amp;gt; 200, req: 'GET https://npm.pkg.github.com/@juanpicado%2Fregistry_test' (streaming)
 http --&amp;gt; 200, req: 'GET https://npm.pkg.github.com/@juanpicado%2Fregistry_test', bytes: 0/2140
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /@types%2fbabel__parser', bytes: 0/708
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /@types%2fbabel__parser', bytes: 0/708
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /@juanpicado%2fregistry_test', bytes: 0/911
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /@juanpicado%2fregistry_test', bytes: 0/911
```

As we can observe if we have a close look at the server output.

* `lodash` is routed through -&amp;gt; `https://registry.npmjs.org/` .
* `"@types/babel__parser": "7.1.1"` is routed through -&amp;gt; `https://npm.pkg.github.com/@types%2Fbabel__parser`.
*  `"@juanpicado/registry_test": "*"` is routed through `https://npm.pkg.github.com/@juanpicado%2Fregistry_test'.`.

Verdaccio is able to handle as many remotes you need, furthermore, you can add two *proxy* values as a fallback in case the package is not being found in the first option.

```
packages:
  '@juanpicado/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs github
```

Verdaccio will try to fetch from *npmjs* and if the package fails for any reason will retry on *github*. This scenario is useful if you are not 100% sure whether the package is available or not in a specific registry. As a downside, if you add multiple proxies will slow down the installations due to the multiple looks up have to perform. 

```
http --&amp;gt; 404, req: 'GET https://registry.npmjs.org/@juanpicado%2Fregistry_test' (streaming)
 http --&amp;gt; 404, req: 'GET https://registry.npmjs.org/@juanpicado%2Fregistry_test', bytes: 0/21
 http --&amp;gt; 200, req: 'GET https://npm.pkg.github.com/@juanpicado%2Fregistry_test' (streaming)
 http --&amp;gt; 200, req: 'GET https://npm.pkg.github.com/@juanpicado%2Fregistry_test', bytes: 0/2140
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /@juanpicado%2fregistry_test', bytes: 0/908
 http &amp;lt;-- 200, user: null(127.0.0.1), req: 'GET /@juanpicado%2fregistry_test', bytes: 0/908
```
#### One more thing

During writing this blog post, I've noticed all files retrieved from the GitHub registry are not tarballs like those that come from other registries which always finish with the suffix `*.tgz`.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/auuzx8avfhdtgu65cu5c.png)

## Wrapping up

**Verdaccio** is a powerful lightweight registry that can be used in multiple ways, you can find more about it in our [website](https://verdaccio.org). This project is run by voluntaries and [you can also be part of it](https://github.com/verdaccio/verdaccio/issues/1461).

If you would like to donate, it can be done through [OpenCollective](https://opencollective.com/verdaccio), help us to reach more developers to have a sustainable Node.js registry.

Thanks for using Verdaccio and please, **keep safe, stay at home and wash your hands regularly.**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>javascript</category>
      <category>github</category>
      <category>node</category>
      <category>npm</category>
    </item>
    <item>
      <title>The crazy story of Verdaccio</title>
      <dc:creator>Juan Picado</dc:creator>
      <pubDate>Tue, 25 Dec 2018 11:21:21 +0000</pubDate>
      <link>https://dev.to/verdaccio/the-crazy-story-of-verdaccio-45p0</link>
      <guid>https://dev.to/verdaccio/the-crazy-story-of-verdaccio-45p0</guid>
      <description>&lt;p&gt;It’s not the first time that I’ve heard the following expression “Thanks for creating Verdaccio”, which actually flatters me, but is really hard to explain in a couple of words that &lt;strong&gt;I haven’t created Verdaccio&lt;/strong&gt;. Perhaps I might be responsible for what is Verdaccio today, but that is a different story. Today I’d like to share the whole story behind this project and how I ended up working on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sinopia “The Origin”
&lt;/h3&gt;

&lt;p&gt;A few years ago in 2013, the main registry &lt;em&gt;(npmjs)&lt;/em&gt; was running for a while and at the same time, &lt;a href="https://github.com/rlidwka"&gt;Alex Kocharin&lt;/a&gt; decided to create Sinopia.&lt;/p&gt;

&lt;p&gt;The original objective was to create a Private registry and Cache to reduce latency between &lt;strong&gt;npmjs&lt;/strong&gt; and the private registry. By that time &lt;strong&gt;npmjs&lt;/strong&gt; was starting to &lt;a href="https://blog.npmjs.org/post/97261727560/npm-inc-and-scalenpm"&gt;struggle with their own performance issues&lt;/a&gt; and be able to host private packages were &lt;em&gt;not supported yet&lt;/em&gt;.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--avHppIkF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1023674214304309249/zzjjK5xh_normal.jpg" alt="Laurie Voss profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Laurie Voss
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @seldo
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w-_0NxBO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-251b99172e08383dcd8979d4111222a843cd7ae1bb2260064db131e003f5724b.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Nobody needs private &lt;a href="https://twitter.com/npmjs"&gt;@npmjs&lt;/a&gt; packages more than npm, Inc.. We need it as much as you do. More.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      23:36 PM - 06 Jun 2014
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=475058595034181632" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=475058595034181632" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1
      &lt;a href="https://twitter.com/intent/like?tweet_id=475058595034181632" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      8
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;In fact &lt;strong&gt;, Sinopia was created before&lt;/strong&gt; &lt;a href="https://nodejs.org/en/blog/npm/2013-outage-postmortem/#what-went-wrong-and-how-was-it-fixed"&gt;&lt;strong&gt;the big npm fall&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;of November 4th&lt;/strong&gt; and much after the first registry was running. That incident put on the spotlight that having a packages &lt;em&gt;proxy/cache&lt;/em&gt; registry in-house makes total sense, at the same time the project evolved adding interesting features as &lt;em&gt;scopes packages, search on UI, plugins, override public packages&lt;/em&gt; etc.&lt;/p&gt;

&lt;p&gt;It was clear the project was growing, but something happened in &lt;strong&gt;October 2015&lt;/strong&gt; where is the date of the latest commit and Alex which is still the current owner decided do not reply to anyone anymore, the reasons are unknown and seem will remain like that forever &lt;em&gt;(he has recent activity in other projects)&lt;/em&gt; and &lt;strong&gt;since is the unique owner the project remains frozen.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Post-sinopia Era
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--muOjfeAW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/779/1%2At8GSq1qq6RC4iQsx1bYDgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--muOjfeAW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/779/1%2At8GSq1qq6RC4iQsx1bYDgg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Early 2016 &lt;a href="https://github.com/rlidwka/sinopia/issues/376"&gt;the Sinopia community started to wonder&lt;/a&gt; why so that such good idea with good support just stopped for no reason.&lt;/p&gt;

&lt;p&gt;A few months later forks did not take long to appear. The most prominent forks were the following &lt;em&gt;(I’m aware there were much more than these)&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_bkKCPSc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/700/1%2AAlByG_WIbkxp6W9OH0JYzQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_bkKCPSc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/700/1%2AAlByG_WIbkxp6W9OH0JYzQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/fl4re/sinopia"&gt;&lt;strong&gt;Sinopia2&lt;/strong&gt;&lt;/a&gt;: Maybe the most affordable and updated fork which seems to be intended with the idea to merge some &lt;a href="https://github.com/rlidwka/sinopia/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+is%3Aopen+dead#issuecomment-197239368"&gt;PR were in the queue&lt;/a&gt;. Still, today seems on having some development but no further new features.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/shimmerjs/sinopia"&gt;&lt;strong&gt;shimmerjs/sinopia&lt;/strong&gt;&lt;/a&gt;: A try from IBM team contributors to provide sinopia with CouchDB support. They did a couple of releases but no much development since the fork &lt;em&gt;(this idea was a PR at Verdaccio for a long time but never was merged)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jdxcode/npm-register"&gt;&lt;strong&gt;npm-register&lt;/strong&gt;&lt;/a&gt;: A inspired sinopia fork but created from scratch focused as to be hosted on PaaS services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;verdaccio&lt;/strong&gt; : And here is where all started, the 0 km started on 5 April 2016 which the “baptism” by &lt;a href="https://github.com/cuzzinz"&gt;&lt;strong&gt;cuzzinz&lt;/strong&gt;&lt;/a&gt; suggesting the name that he read on Wikipedia.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Since it will be a fork, follow the subject the original project used but a new “color.” …. verdaccio&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Verdaccio as fork
&lt;/h3&gt;

&lt;p&gt;After a couple of months without anyone taking the wheel of the ship &lt;a href="https://github.com/jmwilkinson"&gt;John Wilkinson&lt;/a&gt; and &lt;a href="https://github.com/trentearl"&gt;Trent Earl&lt;/a&gt; created the Verdaccio organization on &lt;strong&gt;April 2016&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z2xV0TjO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/797/1%2AAIbetKbnOhE9lVJIJO7ZnQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z2xV0TjO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/797/1%2AAIbetKbnOhE9lVJIJO7ZnQ.png" alt=""&gt;&lt;/a&gt;Trend Earl announcing the fork of Sinopia&lt;/p&gt;

&lt;p&gt;Originally the project was just another fork but soon started to receive the updates from the PR were in hold in &lt;em&gt;sinopia&lt;/em&gt; for a long time and even changes committed on &lt;em&gt;Sinopia2&lt;/em&gt;. There was a feeling of lack of commitment and confusion with all the forks, somehow this issue was well addressed by the Verdaccio authors providing a second breath to the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And here is where I came in.&lt;/strong&gt; August 2016 is where I started to contribute as anyone else, my initial role was to fix the unit testing on Node 6 and stabilize the project in a couple of areas helping &lt;em&gt;Trend&lt;/em&gt; to answer questions on the forum and work side to side to release the first stable version of Verdaccio &lt;strong&gt;v2.0.0&lt;/strong&gt; which was the first try to put some order in the project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you ask me why I decided to contribute Verdaccio. The reason is I liked the name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During the &lt;em&gt;fall of 2016&lt;/em&gt; and beginning of 2017, we noticed more adoption and bug reports, but in February 2017 &lt;strong&gt;the original authors gave me the ownership of Verdaccio&lt;/strong&gt; just before v2.1.1 release and they have stepped away of development and currently are just watcher. Nowadays I still feel super happy and grateful for the opportunity to drive this project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As a side note, in that time, my experience with Node.js was not far away from beginner level even if I had good JS background (I’m a front-end developer until today in my private work experience), I’ve never had the chance to work with Node.js in any workplace, funny huh 😅?. What I learnt about real Node.js development is 100% due Verdaccio and reading open source code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During early &lt;strong&gt;2017&lt;/strong&gt; the project had only ~600 stars and I started to coordinate new contributions and a progressive migration to a modern codebase. I have to highlight the new ideas &lt;a href="https://github.com/Meeeeow"&gt;Meeeeow&lt;/a&gt; that brought to the project as semantic commits, the new UI based on React and other interesting things.&lt;/p&gt;

&lt;p&gt;When you fork a project GitHub &lt;strong&gt;reduces the visibility on Google and Github searches&lt;/strong&gt; , for that reason &lt;a href="https://github.com/verdaccio/verdaccio/issues/75#issuecomment-290631295"&gt;I asked Github about it&lt;/a&gt;. They kindly removed the fork label that we had for 1 year in our main repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_VJFSNom--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/301/1%2AEF5a7ODsYd3OLMWbVQk37A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_VJFSNom--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/301/1%2AEF5a7ODsYd3OLMWbVQk37A.png" alt=""&gt;&lt;/a&gt;The official logo provided by the community&lt;/p&gt;

&lt;p&gt;2017 ended with a decent amount of stars (~1,200), thousands of downloads and a &lt;a href="https://github.com/verdaccio/verdaccio/issues/328"&gt;new logo&lt;/a&gt;, but still, &lt;em&gt;we were not able to do a major release&lt;/em&gt;. There were too much to do and lack of knowledge in many areas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker
&lt;/h4&gt;

&lt;p&gt;By that time, Docker was new for me until I saw the first time the Dockerfile and was getting so many tickets related with such topic that forced me to learn really quick to be able to merge contributions which were Chinese for me, what did I do?. &lt;strong&gt;Go to Docker meetups and read books. Problem solved.&lt;/strong&gt; Thankfully the community has a lot of knowledge to share in this area thus I had the opportunity to learn from amazing contributions. &lt;strong&gt;Nowadays Docker is the most popular way to use Verdaccio&lt;/strong&gt; even over the &lt;em&gt;npm&lt;/em&gt; installation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2018 “the year”
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MeBAEvmw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/804/1%2A77nCfVH9qaQbP1dBkAXBMg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MeBAEvmw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/804/1%2A77nCfVH9qaQbP1dBkAXBMg.png" alt=""&gt;&lt;/a&gt;Verdaccio overpass sinopia on stars December 2018&lt;/p&gt;

&lt;p&gt;I have to admit 2018 was super crazy since the first month the project got really good news and advertised by someone really popular (yeah, that helps a lot) Thanks &lt;a href="https://medium.com/u/a3a8af6addc1"&gt;Dan Abramov&lt;/a&gt;. &lt;strong&gt;create-react-app&lt;/strong&gt; started to use as E2E tooling, which was totally new for me that scenario and changed our perspective of this project, later on, followed by another projects as &lt;strong&gt;Storybook, pnpm, Eclipse Theia, Hyperledger or Modzilla Neutrino&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At the same time, we released a &lt;a href="https://verdaccio.org/"&gt;new website&lt;/a&gt; at the beginning of the year which nowadays is insanely popular and has reduced the questions over Github being for users the first line of information, by the way, we were one of the early adopters of &lt;strong&gt;Docusaurus&lt;/strong&gt;. Thanks to &lt;a href="https://crowdin.com/project/verdaccio"&gt;Crowdin&lt;/a&gt; that have provided a platform for translation and nowadays the community has released 7 full translations of our documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--29UPPDmG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/867/1%2Av-dZShJE4VVgF4fbKMtkBA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--29UPPDmG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/867/1%2Av-dZShJE4VVgF4fbKMtkBA.png" alt=""&gt;&lt;/a&gt;the rate of visits by country on google analytics&lt;/p&gt;

&lt;p&gt;By that time a new contributor was getting super active since 2017, &lt;a href="https://medium.com/u/ffdb15785e37"&gt;Ayush&lt;/a&gt; which was using Verdaccio at work. In the beginning, his feedback was useful for real-time usage and nowadays &lt;strong&gt;he is also one of the authors for the success of this project in 2018&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After some crazy months working really hard, we manage at May to &lt;a href="https://dev.to/verdaccio/verdaccio-3-released--4m8d-temp-slug-2596361"&gt;release Verdaccio 3&lt;/a&gt;. That gave us a small pause to rethink what to do as future steps and how to improve our community.&lt;/p&gt;

&lt;p&gt;Also, we have boarded &lt;a href="https://medium.com/u/5609d55238ab"&gt;Sergio Herrera Guzmán&lt;/a&gt; and &lt;a href="https://medium.com/u/c1899129305b"&gt;Priscila Oliveira&lt;/a&gt; that have demonstrated a lot of interest about Verdaccio contributing with awesome features as the new release pipeline and the new UI which will be released in 2019. &lt;strong&gt;The project currently has ~150 contributors and we are welcoming the new ones with open arms&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ve seen &lt;a href="https://github.com/verdaccio/verdaccio/wiki#articles"&gt;written articles about Verdaccio in multiple languages&lt;/a&gt;, &lt;a href="https://youtu.be/q4XmAy6_ucw"&gt;conference speakers recommending&lt;/a&gt; the usage of Verdaccio, generous &lt;a href="https://opencollective.com/verdaccio"&gt;donations&lt;/a&gt; and our &lt;a href="http://chat.verdaccio.org/"&gt;chat&lt;/a&gt; at Discord more active than ever.&lt;/p&gt;

&lt;p&gt;To finish the story and ending 2018 we have created what we defined as the core team, a small group of developers trying to work together in &lt;a href="https://dev.to/verdaccio/verdaccio-4-alpha-release-1d7p-temp-slug-4609102"&gt;the development of Verdaccio 4&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Status
&lt;/h3&gt;

&lt;p&gt;If you wonder how the “governance” works at Verdaccio, we do it in the following way. &lt;strong&gt;We have 4 owners&lt;/strong&gt; (the founders, &lt;a href="https://medium.com/u/a6a7b0f6a9e4"&gt;Juan Picado&lt;/a&gt;, &lt;a href="https://medium.com/u/ffdb15785e37"&gt;Ayush&lt;/a&gt;) which we open communication when something important should take place and we ship an internal report every 6 months at GitHub teams threads. We have decided this structure in order to avoid what happened with Sinopia do not happen again. The development decisions are taking at the core team level based on democracy and common sense.&lt;/p&gt;

&lt;p&gt;The development communication happens over Discord and &lt;strong&gt;we started to encourage code reviews and open discussions about everything&lt;/strong&gt;. For now, it works, but we are trying to evolve the process and improve it.&lt;/p&gt;

&lt;p&gt;Currently, we are working on improving the documentation and create a clean ecosystem of plugins, integrations and new ways to inform, teach new adopters about the usage of the registry and helping to board new contributors that want to be part of the development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;As you have read, Verdaccio is not a one author project. &lt;strong&gt;It’s a collaboration of many developers that decided don’t let this project die&lt;/strong&gt;. I always like to think the following if you allow me &lt;a href="https://en.wikipedia.org/wiki/Gettysburg_Address"&gt;to quote a simile famous words of Abraham Lincoln&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Verdaccio is a project of the community, by the community and for the community.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m driving this project today, but does not means I’ll do it forever. I like to share responsibilities with others because &lt;strong&gt;nobody is working on Verdaccio full time&lt;/strong&gt; as it happens with other open source projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We want this project alive, updated and as reliable, open source and free option for everybody&lt;/strong&gt;. Following the principles of sinopia stablished as simplicity, zero configuration and with the possibility to extend it.&lt;/p&gt;

&lt;p&gt;Even if some initial developers are not contributing anymore &lt;em&gt;(all we have a life)&lt;/em&gt;, I’m really grateful for the time they have invested and hoped they back in some point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;I’m telling this story based on my own research and all the information collected along the latest 2 years, comments, private chats, and social networks.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>devops</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>Setting up Verdaccio on DigitalOcean</title>
      <dc:creator>Juan Picado</dc:creator>
      <pubDate>Mon, 19 Nov 2018 05:01:01 +0000</pubDate>
      <link>https://dev.to/verdaccio/setting-up-verdaccio-on-digitalocean-6oi</link>
      <guid>https://dev.to/verdaccio/setting-up-verdaccio-on-digitalocean-6oi</guid>
      <description>&lt;p&gt;This one of the multiple articles I will write about running Verdaccio on multiple platforms.&lt;/p&gt;

&lt;p&gt;This time for simplicity I’ve chosen &lt;a href="https://www.digitalocean.com/"&gt;DigitalOcean&lt;/a&gt; that provides affordable base prices and if you want to run your own registry, it’s a good option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Droplet
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IHMUEvuD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A04T_T0af4mEZrJq4QBKKcQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IHMUEvuD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A04T_T0af4mEZrJq4QBKKcQ.png" alt=""&gt;&lt;/a&gt;Choosing an image before creating a droplet&lt;/p&gt;

&lt;p&gt;Create a droplet is fairly easy, it just matters to choose an image and click on create, &lt;strong&gt;I personally selected a Node.js 8.10.0 version&lt;/strong&gt; to simplify the setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Nu5lY2u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AV1GIMttiMPYuX8FLKuumRg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Nu5lY2u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AV1GIMttiMPYuX8FLKuumRg.png" alt=""&gt;&lt;/a&gt;A view of the droplet panel&lt;/p&gt;

&lt;p&gt;While the droplet is created, which takes a matter of seconds the next step is to find a way to log in via SSH, you can find credentials in your email. &lt;em&gt;Keep on mind the droplet provides root access and the next steps I won’t use sudo&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Requirements
&lt;/h3&gt;

&lt;p&gt;As first step we have to install &lt;a href="https://verdaccio.org/"&gt;Verdaccio&lt;/a&gt; with the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --global verdaccio
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;We will use npm for simplicity, but I’d recommend using other tools as &lt;a href="https://pnpm.js.org/"&gt;pnpm&lt;/a&gt; or &lt;a href="https://yarnpkg.com/en/"&gt;yarn&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We will handle the &lt;strong&gt;verdaccio&lt;/strong&gt; process using the &lt;em&gt;pm2&lt;/em&gt; tool that provides handy tools for restarting and monitoring.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g pm2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Nginx Configuration
&lt;/h4&gt;

&lt;p&gt;To handle the request we will set up &lt;em&gt;ngnix&lt;/em&gt; which is really easy to install. I won’t include in this article all steps to setup the web but you can &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04"&gt;follow this article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once &lt;em&gt;nginx&lt;/em&gt; is running in the port 80, we have to modify lightly the configuration file as follow&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vi /etc/nginx/sites-available/default

location / {
 proxy\_pass [http://127.0.0.1:4873/](http://127.0.0.1:4873/);
 proxy\_set\_header Host $http\_host;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;You might pimp this configuration if you wish, but, for simplicity this is good enough for the purpose of this article.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Don’t forget restart &lt;em&gt;nginx&lt;/em&gt; in order the changes take affect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Since we are using a proxy, we must update the default configuration provided by &lt;strong&gt;verdaccio&lt;/strong&gt; to define our proxy pass domain. Edit the file and add the your domain or IP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vi /root/verdaccio//config.yaml

http\_proxy: http://xxx.xxx.xxx.xxx/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Running Verdaccio
&lt;/h3&gt;

&lt;p&gt;Previously we installed pm2 and now is the moment to run &lt;em&gt;verdaccio&lt;/em&gt; with the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 start `which verdaccio`
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: notice we are using which due pm2 seems not to be able to run a node global command.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Verdaccio
&lt;/h3&gt;

&lt;p&gt;Verdaccio provides a nice UI to browse your packages you can access via URL, in our case get the IP from the DigitalOcean control panel and access &lt;em&gt;verdaccio&lt;/em&gt; like &lt;a href="http://xxx.xxx.xxx.xxx/"&gt;http://xxx.xxx.xxx.xxx/&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fVxTxood--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Al5oyR93jMLDOJnYUv88IZg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fVxTxood--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Al5oyR93jMLDOJnYUv88IZg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Install packages
&lt;/h4&gt;

&lt;p&gt;npm will use the default registry on install, but we are willing to use our own registry, to achieve that use the --registry argument to provide a different location.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --registry http://xxx.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Other options I’d suggest if you need to switch between registries is using nrm, to install it just do&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --global nrm
nrm add company-registry [http://xxx.xxx.xxx:4873](http://xxx.xxx.xxx:4873/)
nrm use company-registry
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;With the steps above, you can switch back to other registries in an easy way, for more information just type nrm --help .&lt;/p&gt;

&lt;h4&gt;
  
  
  Publishing Packages
&lt;/h4&gt;

&lt;p&gt;By default verdaccio requires authentication for publishing, thus we need to log in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm adduser --registry http://xxx.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Once you are logged, it’s the moment to publish.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm publish --registry http://xxx.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;As you can see, &lt;strong&gt;host a registry is quite cheap and the initial set up might take fairly short time if you have some skills with UNIX&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Verdaccio provides you good performance for a small middle team with the default plugins, you might scale for bigger teams if is need it, but I will write about those topics in future articles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are willing to share your experience in our blog writing about &lt;strong&gt;&lt;em&gt;verdaccio&lt;/em&gt;&lt;/strong&gt; being installed on other platforms, just &lt;a href="http://chat.verdaccio.org"&gt;send me a message over our chat at Discord&lt;/a&gt; for easy coordination.&lt;/p&gt;




</description>
      <category>cloud</category>
      <category>webdev</category>
      <category>node</category>
      <category>frontenddev</category>
    </item>
    <item>
      <title>Verdaccio 4 alpha release</title>
      <dc:creator>Juan Picado</dc:creator>
      <pubDate>Sun, 21 Oct 2018 13:56:55 +0000</pubDate>
      <link>https://dev.to/verdaccio/verdaccio-4-alpha-release-19dl</link>
      <guid>https://dev.to/verdaccio/verdaccio-4-alpha-release-19dl</guid>
      <description>&lt;p&gt;Since a couple of months ago, &lt;strong&gt;&lt;a href="mailto:verdaccio@4.0.0"&gt;verdaccio@4.0.0&lt;/a&gt;&lt;/strong&gt; is under development, we want to give you a first update of the current list of features ready to be tested and incoming ones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PTKA2uSx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AGK9U1wZmB0JUN2XGhu5LjA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PTKA2uSx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AGK9U1wZmB0JUN2XGhu5LjA.png" alt=""&gt;&lt;/a&gt;Verdaccio 4 UI based on material-ui&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s new in Verdaccio 4 Alpha? 🐣
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Tokens 🛡
&lt;/h4&gt;

&lt;p&gt;Improve security is one of our main goals, we have wanted to improve in one of the most important areas for the users, &lt;strong&gt;tokens&lt;/strong&gt;. Currently the token verification is based on unpack the token for each request and ask the plugin whether the author is authorized. This might be a bit overwhelming if the authentication’s provider is not good handling a big amount of request or is totally unnecessary.&lt;/p&gt;

&lt;p&gt;For that reason we are shipping a &lt;strong&gt;new way to generate token based on JSON Web Token (JWT)&lt;/strong&gt; standard. This feature does not replace the current implementation and will remains as optional. To enable JWT on API is quite simple as we show in the following example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;security:
 api:
 jwt:
 sign:
 expiresIn: 60d
 notBefore: 1
 web:
 sign:
 expiresIn: 7d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We will allow to customize JWT by demand, for instance, &lt;strong&gt;allowing to expire tokens&lt;/strong&gt;. &lt;em&gt;We will go deep into the new JWT system in future articles&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Change Password 🔐
&lt;/h4&gt;

&lt;p&gt;Perhaps the most asked question in our forum and a so trivial action that might be no a problem nowadays. We have listen the community and invested time in this important feature.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm profile set password -ddd --registry http://localhost:4873/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We allow change password via CLI using the npm profile . Currently the support is limited to the htpasswd &lt;a href="https://github.com/verdaccio/verdaccio-htpasswd"&gt;built-in plugin&lt;/a&gt;, but in some point the plugin developers will take advance of this support.&lt;/p&gt;

&lt;h4&gt;
  
  
  Keep it update 🛰
&lt;/h4&gt;

&lt;p&gt;We want to help you to keep it updated, for that reason we are shipping a CLI notification that display the latest stable version available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1KGoH4Jx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AYw0NdQlZgm46s5cAgew1VQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1KGoH4Jx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AYw0NdQlZgm46s5cAgew1VQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  New UI 💅🏻
&lt;/h4&gt;

&lt;p&gt;We are aware that our UI has been simple, but we decided it is the time to scale it up in order to add new features. For that reason we planed a migration to a new UI toolkit that will help ups to achieve that goal, &lt;strong&gt;Material-UI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a first step we migrated the current UI improving the header. But that’s not all is coming, we have big incoming plans in the next alpha releases, for instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change password from UI&lt;/li&gt;
&lt;li&gt;i18n&lt;/li&gt;
&lt;li&gt;Improvements in the detail page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are open to new ideas, feel free to suggest or share your thoughts during this development phase.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker 🐳
&lt;/h4&gt;

&lt;p&gt;We have reduced the size of the image and following the best practices adding a namespace VERDACCIO_XXX_XXX for environment variables. Many other new things are planned for our popular image that &lt;strong&gt;to this day we have almost 2,5 millions pulls&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Future 🔮
&lt;/h4&gt;

&lt;p&gt;I’d like to share our roadmap wether you are interested to know what is in our TODO list and you invite you to contribute or drop your thoughts in any of our channels, we like to listen feedbacks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/verdaccio/verdaccio/projects/10"&gt;verdaccio/verdaccio&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to install
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g verdaccio@next
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;or using Docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull verdaccio/verdaccio:4.x-next
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;⚠️We highly recommend don’t use alpha versions 🚧in production, but if you are willing to test, &lt;strong&gt;always do a backup of your storage and config files&lt;/strong&gt;. In any case, we are really careful with our deployments and are always highly reliable, but, we are humans after all.&lt;/p&gt;

&lt;p&gt;However, if you are using Verdaccio 3, there are some small breaking changes you should keep on mind, specially for those are using environment variables with Docker, &lt;a href="https://github.com/verdaccio/verdaccio/pull/924"&gt;all details here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributions and Community 🌍
&lt;/h3&gt;

&lt;p&gt;Verdaccio is an open source project, but also we aims to be a nice community and I’d like to introduce you &lt;strong&gt;the team that grain by grain is crafting this amazing project&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://verdaccio.org/en/team"&gt;Verdaccio · A lightweight private npm proxy registry&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We thanks all contributors, either via GitHub or translations, &lt;strong&gt;any contribution is gold for us.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Donations 👍🏻
&lt;/h3&gt;

&lt;p&gt;I’d like to reminder our readers that there are other ways to contribute to this project &lt;strong&gt;becoming a backer&lt;/strong&gt;. Furthermore, all contributors are voluntaries and nobody is working full time on this project, but we are aware is getting bigger and deserves some promotion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opencollective.com/verdaccio"&gt;verdaccio - Open Collective&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those are already backers and sponsors, thanks so much 👏👏👏.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d9OQEgox--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/Dm1IyDTX0AEtI6X.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--JUaHU3Lj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1060387429662842880/h0QZVcTJ_normal.jpg" alt="Juan Picado (胡) profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Juan Picado (胡)
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/jotadeveloper"&gt;@jotadeveloper&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w-_0NxBO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-251b99172e08383dcd8979d4111222a843cd7ae1bb2260064db131e003f5724b.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Look what I just got on my mailbox 🔥🔥 ... &lt;a href="https://twitter.com/verdaccio_npm"&gt;@verdaccio_npm&lt;/a&gt; ..👌🏼 I love them &lt;a href="https://twitter.com/hashtag/stickers"&gt;#stickers&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/nodejs"&gt;#nodejs&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/npm"&gt;#npm&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      17:31 PM - 11 Sep 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1039567122144354305" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1039567122144354305" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2
      &lt;a href="https://twitter.com/intent/like?tweet_id=1039567122144354305" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      6
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;If you have the chance to meet any of our team members, feel free to ask for stickers (hopefully they will carry some), we use our budget mostly for promotion and you can help us to spread the voice, give your start or just recommend with your colleagues how great is Verdaccio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping Up 👋🏼
&lt;/h3&gt;

&lt;p&gt;If you live near Vienna (Austria), &lt;strong&gt;we will have a presentation in early next year (January 2019) at ViennaJS meetup&lt;/strong&gt;, feel free to join us if you want to know more about this project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://viennajs.org/en/meetup/2019-01"&gt;ViennaJS January 2019 - Meetups - ViennaJS Monthly Meetups&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A future core team meeting will take place between 29th and 30th November at &lt;strong&gt;Berlin&lt;/strong&gt; , we are attending &lt;a href="https://reactday.berlin/"&gt;React Day Berlin&lt;/a&gt;, feel free to DM if you want to have a chat to any of us.&lt;/p&gt;




</description>
      <category>packagemanagement</category>
      <category>releases</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Verdaccio and deterministic lock files</title>
      <dc:creator>Juan Picado</dc:creator>
      <pubDate>Thu, 06 Sep 2018 20:21:42 +0000</pubDate>
      <link>https://dev.to/verdaccio/verdaccio-and-deterministic-lock-files-19go</link>
      <guid>https://dev.to/verdaccio/verdaccio-and-deterministic-lock-files-19go</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Aigz5Q878nju28EAa6RJ_Xg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Aigz5Q878nju28EAa6RJ_Xg.png"&gt;&lt;/a&gt;Snippet of some random lock file&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lockfiles&lt;/strong&gt; on node package manager (npm) clients are not a new topic, yarn broke the node package managers world with a term called &lt;a href="https://yarnpkg.com/blog/2017/05/31/determinism/" rel="noopener noreferrer"&gt;&lt;strong&gt;determinism&lt;/strong&gt;&lt;/a&gt; providing a new file generated after install called yarn.lock to pin and freeze dependencies with the objective to avoid inconstancies across multiple installations.&lt;/p&gt;

&lt;p&gt;If you are using a private registry as &lt;a href="https://verdaccio.org/" rel="noopener noreferrer"&gt;Verdaccio&lt;/a&gt;, it might be a concern committing the lock file in the repo using the private or local domain as registry URL and then someone else due his environment is not able to fetch the tarballs defined in the lock file.&lt;/p&gt;

&lt;p&gt;This is merely an issue that all package managers have to resolve, nowadays is not hard to see companies using their own registry to host private packages or using the &lt;strong&gt;Verdaccio&lt;/strong&gt; the power feature &lt;a href="https://verdaccio.org/docs/en/uplinks" rel="noopener noreferrer"&gt;uplinks&lt;/a&gt; to resolve dependencies from more than one registry using one single endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does a lock file look like?
&lt;/h3&gt;

&lt;p&gt;Lock file looks different based on the package manager you are using, in the case of npm as an example looks like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"[@babel/code-frame](http://twitter.com/babel/code-frame)@7.0.0-beta.44":
 version "7.0.0-beta.44"
 resolved "[http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9](http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9)"
 dependencies:
 "[@babel/highlight](http://twitter.com/babel/highlight)" "7.0.0-beta.44"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The snippet above is just a small part of this huge file which nobody dares to deal when conflicts arise. However, I just want you to focus on a field called &lt;strong&gt;resolved&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Simple example with Verdaccio as localhost
&lt;/h4&gt;

&lt;p&gt;Let’s imagine you are using &lt;strong&gt;Verdaccio&lt;/strong&gt; and &lt;strong&gt;yarn&lt;/strong&gt; for local purposes and your registry configuration points to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn config set registry http://localhost:4873/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running an installation, yarn install, a lock file is generated and each dependency will have a field called resolved that points exactly the URI where tarball should be downloaded in a future install. That meaning the package manager will rely on such URI no matter what.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In the case of pnpm the lock file looks a bit different, we will see that in detail later on this article.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// yarn.lock

math-random@^1.0.1:
 version "1.0.1"
 resolved "[http://localhost:4873/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac](http://localhost:4873/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s imagine you that might want to change your domain where your registry is hosted and the resolved field still points to the previous location and your package manager won’t be able to resolve the project dependencies anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A usual solution is to delete the whole lock file and generate a new one&lt;/strong&gt; , but, this is not practical for large teams since will drive you to conflicts between branch hard to solve.&lt;/p&gt;

&lt;p&gt;So, &lt;em&gt;How can I use a private registry avoiding the&lt;/em&gt; &lt;em&gt;resolved field issue?&lt;/em&gt;. All clients handle this issue in a different way, let’s see how they do it.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does the resolved field is being used by …?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AkafHawK1RCt-LDsdGz6iUA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AkafHawK1RCt-LDsdGz6iUA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npm uses a JSON as a format for the lock file. The good news is since &lt;strong&gt;&lt;a href="mailto:npm@5.0.0"&gt;npm@5.0.0&lt;/a&gt;&lt;/strong&gt; &lt;a href="http://blog.npmjs.org/post/161081169345/v500" rel="noopener noreferrer"&gt;ignores the resolved field&lt;/a&gt; on package-lock.json file and basically fallback to the one defined in the .npmrc or via --registry argument using the CLI in case is exist, otherwise, it will use the defined in the resolved field.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-862834964932435969-971" src="https://platform.twitter.com/embed/Tweet.html?id=862834964932435969"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-862834964932435969-971');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=862834964932435969&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Nowadays you can use the npm cli with lock file safely with Verdaccio independently the URL where tarball was served. But, I’d recommend to share a local .npmrc file with the registry set by default locally or notify your team about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A0pWUcgRyhax5KVJKsnbgkA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A0pWUcgRyhax5KVJKsnbgkA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are using Yarn the story is a bit different. Until the version 1.9.4, it tries to resolve what lock file defines as a first option.&lt;/p&gt;

&lt;p&gt;There are some references on PR, RFCs or tickets opened were they discuss how to address this problem properly and if you are willing to dive into this topic allow me to share the most interesting threads you might follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace resolved field by hash &lt;a href="https://github.com/yarnpkg/rfcs/pull/64#issuecomment-414649518" rel="noopener noreferrer"&gt;https://github.com/yarnpkg/rfcs/pull/64#issuecomment-414649518&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;yarn.lock should not include base domain registry &lt;a href="https://github.com/yarnpkg/yarn/issues/3330" rel="noopener noreferrer"&gt;https://github.com/yarnpkg/yarn/issues/3330&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Remove hostname from the lock files &lt;a href="https://github.com/yarnpkg/yarn/issues/5892" rel="noopener noreferrer"&gt;https://github.com/yarnpkg/yarn/issues/5892&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;TDLR; Yarn 2.0 &lt;a href="https://github.com/yarnpkg/yarn/projects/4#card-10080906" rel="noopener noreferrer"&gt;has planned to solve this issue&lt;/a&gt; in the next major version, to this day sill &lt;a href="https://github.com/yarnpkg/rfcs/pull/64#issuecomment-414163196" rel="noopener noreferrer"&gt;discussing what approach to take&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1012%2F1%2AY3jjekoNQiujCccP3bNvTg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1012%2F1%2AY3jjekoNQiujCccP3bNvTg.png"&gt;&lt;/a&gt;&lt;a href="https://pnpm.js.org/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://pnpm.js.org/" rel="noopener noreferrer"&gt;https://pnpm.js.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pnpm.js.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;pnpm&lt;/strong&gt;&lt;/a&gt; follows the same approach as other package managers generating a lock file but, in this case, the file is being called shrinkwrap.yaml that is based in &lt;strong&gt;yaml format.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies:
 jquery: 3.3.1
 parcel: 1.9.7
packages:
 /@mrmlnc/readdir-enhanced/2.2.1:
 dependencies:
 call-me-maybe: 1.0.1
 glob-to-regexp: 0.3.0
 dev: false
 engines:
 node: '\&amp;gt;=4'
 resolution:
 integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
 tarball: /@mrmlnc%2freaddir-enhanced/-/readdir-enhanced-2.2.1.tgz

....

registry: '[http://localhost:4873/'](http://localhost:4873/')
shrinkwrapMinorVersion: 9
shrinkwrapVersion: 3
specifiers:
 jquery: ^3.3.1
 parcel: ^1.9.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example above is just a small snippet of how this long file looks like and you might observe that there is a field called &lt;a href="https://github.com/pnpm/spec/blob/master/shrinkwrap/3.8.md#registry" rel="noopener noreferrer"&gt;registry&lt;/a&gt; added at the bottom of the lock file which &lt;a href="https://github.com/pnpm/pnpm/issues/1072" rel="noopener noreferrer"&gt;was introduced to reduce the file size of the lock file&lt;/a&gt;, in some scenarios pnpm decides to set &lt;a href="https://github.com/josephschmitt/pnpm-406-npmE" rel="noopener noreferrer"&gt;the domain is part of the tarball field&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pnpm&lt;/strong&gt; will try to fetch dependencies using the registry defined within the lockfile as yarn &lt;strong&gt;does&lt;/strong&gt;. However, as a workaround, if the domain changes you must update the registry field manually, it’s not hard to do but, is better than nothing.&lt;/p&gt;

&lt;p&gt;pnpm has already opened a ticket to drive this issue, I’ll let below the link to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pnpm/pnpm/issues/1353" rel="noopener noreferrer"&gt;Remove the "registry" field from "shrinkwrap.yaml" · Issue #1353 · pnpm/pnpm&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Scoped Registry Workaround
&lt;/h3&gt;

&lt;p&gt;A common way to route private packages is route scoped dependencies through a different registry. This works on npm and pnpm&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;registry=[https://registry.npmjs.org](https://registry.npmjs.org/)
@mycompany:registry=http://verdaccio-domain:4873/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;It does exist any support for at the time of this writing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In my opinion, this is just a workaround, which depends on the number or scopes you handle to decide whether or not worth it. Furthermore, the package manager will bypass those packages that do not match with the scope and won’t be resolved by your private registry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;package managers&lt;/strong&gt; are working to solve this issues with backward compatibility and with good performance.&lt;/p&gt;

&lt;p&gt;For now, the best solution if you share this concern is &lt;strong&gt;using npm until the other clients decide what to do&lt;/strong&gt; or &lt;strong&gt;following the recommendations above for each client&lt;/strong&gt;.&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>npm</category>
      <category>pnpm</category>
      <category>node</category>
    </item>
    <item>
      <title>Five use cases where a npm private proxy fits in your workflow</title>
      <dc:creator>Juan Picado</dc:creator>
      <pubDate>Mon, 30 Apr 2018 12:30:02 +0000</pubDate>
      <link>https://dev.to/verdaccio/five-use-cases-where-a-npm-private-proxy-fits-in-your-workflow-48lc</link>
      <guid>https://dev.to/verdaccio/five-use-cases-where-a-npm-private-proxy-fits-in-your-workflow-48lc</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qld08uv9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/301/1%2Awnx6xw8QZ9yFBzOvxlTnuA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qld08uv9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/301/1%2Awnx6xw8QZ9yFBzOvxlTnuA.png" alt="" width="301" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is about why setting up a npm private proxy is a good idea, going through most common questions that I’ve been asked since contributing to &lt;strong&gt;sinopia’s&lt;/strong&gt; fork &lt;a href="https://medium.com/@jotadeveloper/an-introduction-to-verdaccio-f6c72e865425"&gt;verdaccio&lt;/a&gt;, and how a developer addresses many use cases that made me appreciate how useful it can be set up a local private proxy&lt;/p&gt;

&lt;p&gt;Read more here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@jotadeveloper/five-use-cases-where-a-npm-private-proxy-fits-in-your-workflow-632a81779c14"&gt;https://medium.com/@jotadeveloper/five-use-cases-where-a-npm-private-proxy-fits-in-your-workflow-632a81779c14&lt;/a&gt;&lt;/p&gt;




</description>
      <category>yarn</category>
      <category>npm</category>
      <category>node</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
