| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 --- |  | 
| 2 title: "Command: Get" |  | 
| 3 --- |  | 
| 4 |  | 
| 5     $ pub get [--offline] |  | 
| 6 |  | 
| 7 This command gets all the dependencies listed in the |  | 
| 8 [`pubspec.yaml`](pubspec.html) file in the current working directory, as well as |  | 
| 9 their [transitive dependencies](glossary.html#transitive-dependency), and places |  | 
| 10 them in a `packages` directory located next to the pubspec. For example: |  | 
| 11 |  | 
| 12     $ pub get |  | 
| 13     Got dependencies! |  | 
| 14 |  | 
| 15 Once the dependencies are acquired, they may be referenced in Dart code. For |  | 
| 16 example, if a package depends on `unittest`: |  | 
| 17 |  | 
| 18 {% highlight dart %} |  | 
| 19 import "package:unittest/unittest.dart; |  | 
| 20 {% endhighlight %} |  | 
| 21 |  | 
| 22 When `pub get` gets new dependencies, it writes a |  | 
| 23 [lockfile](glossary.html#lockfile) to ensure that future gets will use the |  | 
| 24 same versions of those dependencies. Application packages should check in the |  | 
| 25 lockfile to source control; this ensures the application will use the exact same |  | 
| 26 versions of all dependencies for all developers and when deployed to production. |  | 
| 27 Library packages should not check in the lockfile, though, since they're |  | 
| 28 expected to work with a range of dependency versions. |  | 
| 29 |  | 
| 30 If a lockfile already exists, `pub get` uses the versions of dependencies |  | 
| 31 locked in it if possible. If a dependency isn't locked, pub will get the |  | 
| 32 latest version of that dependency that satisfies all the [version |  | 
| 33 constraints](glossary.html#version-constraint). This is the primary difference |  | 
| 34 between `pub get` and [`pub upgrade`](pub-upgrade.html), which always tries to |  | 
| 35 get the latest versions of all dependencies. |  | 
| 36 |  | 
| 37 ## Getting a new dependency |  | 
| 38 |  | 
| 39 If a dependency is added to the pubspec and then `pub get` is run, it will |  | 
| 40 get the new dependency and any of its transitive dependencies and place them in |  | 
| 41 the `packages` directory. However, it won't change the versions of any |  | 
| 42 already-acquired dependencies unless that's necessary to get the new |  | 
| 43 dependency. |  | 
| 44 |  | 
| 45 ## Removing a dependency |  | 
| 46 |  | 
| 47 If a dependency is removed from the pubspec and then `pub get` is run, it will |  | 
| 48 remove the dependency from the `packages` directory, thus making it |  | 
| 49 unavailable for importing. Any transitive dependencies of the removed dependency |  | 
| 50 will also be removed, as long as no remaining immediate dependencies also depend |  | 
| 51 on them. Removing a dependency will never change the versions of any |  | 
| 52 already-acquired dependencies. |  | 
| 53 |  | 
| 54 ## Linked `packages` directories |  | 
| 55 |  | 
| 56 Every [entrypoint](glossary.html#entrypoint) in a package needs to be next to a |  | 
| 57 `packages` directory in order for it to import packages acquired by Pub. |  | 
| 58 However, it's not convenient to put every entrypoint at the top level of the |  | 
| 59 package alongside the main `packages` directory. You may have example scripts or |  | 
| 60 tests that you want to be able to run from subdirectories. |  | 
| 61 |  | 
| 62 `pub get` solves this issue by creating additional `packages` directories |  | 
| 63 that link to the main `packages` directory at the root of your package. It |  | 
| 64 assumes your package is laid out according to the [package layout |  | 
| 65 guide](package-layout.html), and creates a linked `packages` directory in |  | 
| 66 `bin/`, `test/`, and `example/`, as well as their subdirectories. |  | 
| 67 |  | 
| 68 ## The system package cache |  | 
| 69 |  | 
| 70 Dependencies are not physically stored in the `packages` directory that pub |  | 
| 71 creates. Dependencies downloaded over the internet, such as those from Git and |  | 
| 72 [pub.dartlang.org](http://pub.dartlang.org), are stored in a system-wide cache |  | 
| 73 and linked to from the `packages` directory. This means that if multiple |  | 
| 74 packages use the same version of the same dependency, it will only need to be |  | 
| 75 downloaded and stored locally once. It also means that it's safe to delete the |  | 
| 76 `packages` directory without worrying about re-downloading packages. |  | 
| 77 |  | 
| 78 By default, the system package cache is located in the `.pub-cache` subdirectory |  | 
| 79 of your home directory. However, it may be configured by setting the `PUB_CACHE` |  | 
| 80 environment variable before running Pub. |  | 
| 81 |  | 
| 82 ## Getting while offline |  | 
| 83 |  | 
| 84 If you don't have network access, you can still run `pub get`. Since pub |  | 
| 85 downloads packages to a central cache shared by all packages on your system, it |  | 
| 86 can often find previous-downloaded packages there without needing to hit the |  | 
| 87 network. |  | 
| 88 |  | 
| 89 However, by default, pub will always try to go online when you get if you |  | 
| 90 have any hosted dependencies so that it can see if newer versions of them are |  | 
| 91 available. If you don't want it to do that, pass the `--offline` flag when |  | 
| 92 running pub. In this mode, it will only look in your local package cache and |  | 
| 93 try to find a set of versions that work with your package from what's already |  | 
| 94 available. |  | 
| 95 |  | 
| 96 Keep in mind that pub *will* generate a lockfile after it does this. If the |  | 
| 97 only version of some dependency in your cache happens to be old, this will lock |  | 
| 98 your app to that version. The next time you are online, you will likely want to |  | 
| 99 run [`pub upgrade`](pub-upgrade.html) to upgrade to a later version. |  | 
| OLD | NEW | 
|---|