title: Why does Yarn sometimes ping pong between how it represents versions?
body: <p>We have a React project that is using Yarn for package management. I notice that Yarn sometimes tweaks versions in the <code>yarn.lock</code> file even though nothing is changing. For example, when I run <code>yarn install</code>, it wants to make the change from:</p>
  
  <pre><code>yarn@^1.21.1:
  </code></pre>
  
  <p>to:</p>
  
  <pre><code>yarn@1.21.1, yarn@^1.21.1:
  </code></pre>
  
  <p>I don't quite understand why since the versions are the same. It flip-flops on this change quite often and it just depends on what packages we're installing. This example is for the <code>yarn</code> package itself, but it does this with a few different things.</p>
  
  <p>Does anyone have any insight into why this is happening? Is it an issue with one developer's setup vs. another developer's setup? It's incredibly annoying because every time I sync my branch, run a <code>yarn install</code>, it wants to make changes to our lock file when I don't think it should be doing this.</p>
  
  <p>Edit:
  We also have this in our <code>package.json</code> file:</p>
  
  <pre><code>"resolutions": {
    "yarn": "1.21.1"
  }
  </code></pre>