| Index: app/views/doc/dependencies.html
|
| diff --git a/app/views/doc/dependencies.html b/app/views/doc/dependencies.html
|
| deleted file mode 100644
|
| index 8c8df54674138628b2efc37483a729be54a61397..0000000000000000000000000000000000000000
|
| --- a/app/views/doc/dependencies.html
|
| +++ /dev/null
|
| @@ -1,267 +0,0 @@
|
| -<ol class="toc">
|
| - <li><a href="#sources">Sources</a>
|
| - <ol>
|
| - <li><a href="#hosted-packages">Hosted packages</a></li>
|
| - <li><a href="#git-packages">Git packages</a></li>
|
| - <li><a href="#path-packages">Path packages</a></li>
|
| - </ol>
|
| - </li>
|
| - <li><a href="#version-constraints">Version constraints</a></li>
|
| - <li><a href="#dev-dependencies">Dev dependencies</a></li>
|
| -</ol>
|
| -
|
| -<p>Dependencies are one of pub’s core concepts. A dependency is another package
|
| -that your package needs in order to work. Dependencies are specified in your
|
| -<a href="pubspec.html">pubspec</a>. You only list
|
| -<a href="glossary.html#immediate-dependency">immediate dependencies</a>—the stuff
|
| -your package uses directly. Pub handles
|
| -<a href="glossary.html#transitive-dependency">transitive dependencies</a> for you.</p>
|
| -
|
| -<p>For each dependency, you specify the <em>name</em> of the package you depend on. For
|
| -<a href="glossary.html#library-package">library packages</a>, you specify the <em>range of
|
| -versions</em> of that package that you allow. You may also specify the
|
| -<a href="glossary.html#source"><em>source</em></a> which tells pub how the package can be located,
|
| -and any additional <em>description</em> that the source needs to find the package.</p>
|
| -
|
| -<p>There are two different ways to specify dependencies based on what data you want
|
| -to provide. The shortest way is to just specify a name:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span>
|
| -</code></pre></div>
|
| -
|
| -<p>This creates a dependency on <code>transmogrify</code>that allows any version, and looks
|
| -it up using the default source, which is this site itself. To limit the
|
| -dependency to a range of versions, you can provide a <em>version constraint</em>:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span> <span class="s">'>=1.0.0</span><span class="nv"> </span><span class="s"><2.0.0'</span>
|
| -</code></pre></div>
|
| -
|
| -<p>This creates a dependency on <code>transmogrify</code> using the default source and
|
| -allowing any version from <code>1.0.0</code> to <code>2.0.0</code> (but not including <code>2.0.0</code>). See
|
| -<a href="#version-constraints">below</a> for details on the version constraint syntax.</p>
|
| -
|
| -<p>If you want to specify a source, the syntax looks a bit different:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">hosted</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">transmogrify</span>
|
| - <span class="l-Scalar-Plain">url</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">http://some-package-server.com</span>
|
| -</code></pre></div>
|
| -
|
| -<p>This depends on the <code>transmogrify</code> package using the <code>hosted</code> source.
|
| -Everything under the source key (here, just a map with a <code>url:</code> key) is the
|
| -description that gets passed to the source. Each source has its own description
|
| -format, detailed below.</p>
|
| -
|
| -<p>You can also provide a version constraint:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">hosted</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">transmogrify</span>
|
| - <span class="l-Scalar-Plain">url</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">http://some-package-server.com</span>
|
| - <span class="l-Scalar-Plain">version</span><span class="p-Indicator">:</span> <span class="s">'>=1.0.0</span><span class="nv"> </span><span class="s"><2.0.0'</span>
|
| -</code></pre></div>
|
| -
|
| -<p>This long form is used when you don’t use the default source or when you have a
|
| -complex description you need to specify. But in most cases, you’ll just use the
|
| -simple “name: version” form.</p>
|
| -
|
| -<h2 id="dependency-sources">Dependency sources</h2>
|
| -
|
| -<p>Here are the different sources pub can use to locate packages, and the
|
| -descriptions they allow:</p>
|
| -
|
| -<h3 id="hosted-packages">Hosted packages</h3>
|
| -
|
| -<p>A <em>hosted</em> package is one that can be downloaded from this site (or another
|
| -HTTP server that speaks the same API). Most of your dependencies will be of
|
| -this form. They look like this:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span> <span class="s">'>=0.4.0</span><span class="nv"> </span><span class="s"><1.0.0'</span>
|
| -</code></pre></div>
|
| -
|
| -<p>Here, you’re saying your package depends on a hosted package named
|
| -“transmogrify” and you’ll work with any version from 0.4.0 to 1.0.0 (but not
|
| -1.0.0 itself).</p>
|
| -
|
| -<p>If you want to use your own package server, you can use a description that
|
| -specifies its URL:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">hosted</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">transmogrify</span>
|
| - <span class="l-Scalar-Plain">url</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">http://your-package-server.com</span>
|
| - <span class="l-Scalar-Plain">version</span><span class="p-Indicator">:</span> <span class="s">'>=0.4.0</span><span class="nv"> </span><span class="s"><1.0.0'</span>
|
| -</code></pre></div>
|
| -
|
| -<h3 id="git-packages">Git packages</h3>
|
| -
|
| -<p>Sometimes you live on the bleeding edge and you need to use stuff that hasn’t
|
| -been formally released yet. Maybe your package itself is still in development
|
| -and is using other packages that are being developed at the same time. To make
|
| -that easier, you can depend directly on a package stored in a <a href="http://git-scm.com/">Git</a>
|
| -repository.</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">kittens</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">git</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">git://github.com/munificent/kittens.git</span>
|
| -</code></pre></div>
|
| -
|
| -<p>The <code>git</code> here says this package is found using Git, and the URL after that is
|
| -the Git URL that can be used to clone the package. Pub assumes that the package
|
| -is in the root of the git repository.</p>
|
| -
|
| -<p>If you want to depend on a specific commit, branch, or tag, you can also
|
| -provide a <code>ref</code> argument:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">kittens</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">git</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">url</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">git://github.com/munificent/kittens.git</span>
|
| - <span class="l-Scalar-Plain">ref</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">some-branch</span>
|
| -</code></pre></div>
|
| -
|
| -<p>The ref can be anything that Git allows to <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#naming-commits">identify a commit</a>.</p>
|
| -
|
| -<h3 id="path-packages">Path packages</h3>
|
| -
|
| -<p>Sometimes you find yourself working on multiple related packages at the same
|
| -time. Maybe you are hacking on a framework while building an app that uses it.
|
| -In those cases, during development you really want to depend on the “live”
|
| -version of that package on your local file system. That way changes in one
|
| -package are instantly picked up by the one that depends on it.</p>
|
| -
|
| -<p>To handle that, pub supports <em>path dependencies</em>.</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">transmogrify</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">path</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">/Users/me/transmogrify</span>
|
| -</code></pre></div>
|
| -
|
| -<p>This says the root directory for <code>transmogrify</code> is <code>/Users/me/transmogrify</code>.
|
| -When you use this, pub will generate a symlink directly to the <code>lib</code> directory
|
| -of the referenced package directory. Any changes you make to the dependent
|
| -package will be seen immediately. You don’t need to run pub every time you
|
| -change the dependent package.</p>
|
| -
|
| -<p>Relative paths are allowed and are considered relative to the directory
|
| -containing your pubspec.</p>
|
| -
|
| -<p>Path dependencies are useful for local development, but do not play nice with
|
| -sharing code with the outside world. It’s not like everyone can get to
|
| -your file system, after all. Because of this, you cannot upload a package to
|
| -<a href="http://pub.dartlang.org">pub.dartlang.org</a> if it has any path dependencies in its pubspec.</p>
|
| -
|
| -<p>Instead, the typical workflow is:</p>
|
| -
|
| -<ol>
|
| - <li>Edit your pubspec locally to use a path dependency.</li>
|
| - <li>Hack on the main package and the package it depends on.</li>
|
| - <li>Once they’re both in a happy place, publish the dependent package.</li>
|
| - <li>Then change your pubspec to point to the now hosted version of its dependent.</li>
|
| - <li>Now you can publish your main package too if you want.</li>
|
| -</ol>
|
| -
|
| -<h2 id="version-constraints">Version constraints</h2>
|
| -
|
| -<p>If your package is an application, you don’t usually need to specify <a href="glossary.html#version-constraint">version
|
| -constraints</a> for your dependencies. You will
|
| -typically want to use the latest versions of the dependencies when you first
|
| -create your app. Then you’ll create and check in a
|
| -<a href="glossary.html#lockfile">lockfile</a> that pins your dependencies to those specific
|
| -versions. Specifying version constraints in your pubspec then is usually
|
| -redundant (though you can do it if you want).</p>
|
| -
|
| -<p>For a <a href="glossary.html#library-package">library package</a> that you want users to
|
| -reuse, though, it is important to specify version constraints. That lets people
|
| -using your package know which versions of its dependencies they can rely on to
|
| -be compatible with your library. Your goal is to allow a range of versions as
|
| -wide as possible to give your users flexibility. But it should be narrow enough
|
| -to exclude versions that you know don’t work or haven’t been tested.</p>
|
| -
|
| -<p>The Dart community uses <a href="http://semver.org/">semantic versioning</a>, which helps you know which
|
| -versions should work. If you know that your package works fine with <code>1.2.3</code> of
|
| -some dependency, then semantic versioning tells you that it should work (at
|
| -least) up to <code>2.0.0</code>.</p>
|
| -
|
| -<p>A version constraint is a series of:</p>
|
| -
|
| -<dl class="dl-horizontal">
|
| - <dt><code>any</code></dt>
|
| - <dd>The string "any" allows any version. This is equivalent to an empty
|
| - version constraint, but is more explicit.</dd>
|
| -
|
| - <dt><code>1.2.3</code></dt>
|
| - <dd>A concrete version number pins the dependency to only allow that
|
| - <em>exact</em> version. Avoid using this when you can because it can cause
|
| - version lock for your users and make it hard for them to use your package
|
| - along with other packages that also depend on it.</dd>
|
| -
|
| - <dt><code>>=1.2.3</code></dt>
|
| - <dd>Allows the given version or any greater one. You'll typically use this.
|
| - </dd>
|
| -
|
| - <dt><code>>1.2.3</code></dt>
|
| - <dd>Allows any version greater than the specified one but <em>not</em> that
|
| - version itself.</dd>
|
| -
|
| - <dt><code><=1.2.3</code></dt>
|
| - <dd>Allows any version lower than or equal to the specified one. You
|
| - <em>won't</em> typically use this.</dd>
|
| -
|
| - <dt><code><1.2.3</code></dt>
|
| - <dd>Allows any version lower than the specified one but <em>not</em> that
|
| - version itself. This is what you'll usually use because it lets you specify
|
| - the upper version that you know does <em>not</em> work with your package
|
| - (because it's the first version to introduce some breaking change).</dd>
|
| -</dl>
|
| -
|
| -<p>You can specify version parts as you want, and their ranges will be intersected
|
| -together. For example, <code>>=1.2.3 <2.0.0</code> allows any version from <code>1.2.3</code> to
|
| -<code>2.0.0</code> excluding <code>2.0.0</code> itself.</p>
|
| -
|
| -<aside class="alert alert-warning">
|
| -
|
| -Note that <code>></code> is also valid YAML syntax so you will want to quote
|
| -the version string (like <code>'<=1.2.3 >2.0.0'</code>) if the version
|
| -constraint starts with that.
|
| -
|
| -</aside>
|
| -
|
| -<h2 id="dev-dependencies">Dev dependencies</h2>
|
| -
|
| -<p>Pub supports two flavors of dependencies: regular dependencies and <em>dev
|
| -dependencies.</em> Dev dependencies differ from regular dependencies in that <em>dev
|
| -dependencies of packages you depend on are ignored</em>. That’s a mouthful, so
|
| -here’s a motivating example:</p>
|
| -
|
| -<p>Say the <code>transmogrify</code> package uses the <code>unittest</code> package in its tests and only
|
| -in its tests. If someone just wants to use <code>transmogrify</code>—import its
|
| -libraries—it doesn’t actually need <code>unittest</code>. In this case, it specifies
|
| -<code>unittest</code> as a dev dependency. Its pubspec will have something like:</p>
|
| -
|
| -<div class="highlight"><pre><code class="yaml"><span class="l-Scalar-Plain">dev_dependencies</span><span class="p-Indicator">:</span>
|
| - <span class="l-Scalar-Plain">unittest</span><span class="p-Indicator">:</span> <span class="s">'>=0.5.0'</span>
|
| -</code></pre></div>
|
| -
|
| -<p>Pub gets every package your package package depends on, and everything <em>those</em>
|
| -packages depend on, transitively. It also gets your package’s dev dependencies,
|
| -but it <em>ignores</em> the dev dependencies of any dependent packages. Pub only gets
|
| -<em>your</em> package’s dev dependencies. So when your package depends on
|
| -<code>transmogrify</code> it will get <code>transmogrify</code> but not <code>unittest</code>.</p>
|
| -
|
| -<p>The rule for deciding between a regular or dev dependency is pretty simple. If
|
| -the dependency is imported from something in your <code>lib</code> directory, it needs to
|
| -be a regular dependency. If it’s only imported from <code>test</code>, <code>example</code>, etc. it
|
| -can and should be a dev dependency.</p>
|
| -
|
| -<p>Using dev dependencies makes dependency graphs smaller. That makes pub run
|
| -faster, and makes it easier to find a set of package versions that satisfy all
|
| -constraints. Use them when you can and your users will thank you.</p>
|
| -
|
|
|