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