| Index: app/views/doc/package-layout.html
|
| diff --git a/app/views/doc/package-layout.html b/app/views/doc/package-layout.html
|
| deleted file mode 100644
|
| index 2530ffeaa1fcc8d524945654688fac56eb22524c..0000000000000000000000000000000000000000
|
| --- a/app/views/doc/package-layout.html
|
| +++ /dev/null
|
| @@ -1,368 +0,0 @@
|
| -<ol class="toc">
|
| - <li><a href="#the-basics">The basics</a></li>
|
| - <li><a href="#readme">README</a></li>
|
| - <li><a href="#public-libraries">Public libraries</a></li>
|
| - <li><a href="#public-assets">Public assets</a></li>
|
| - <li><a href="#implementation-files">Implementation files</a></li>
|
| - <li><a href="#web-files">Web files</a></li>
|
| - <li><a href="#command-line-apps">Command-line apps</a></li>
|
| - <li><a href="#tests-and-benchmarks">Tests and benchmarks</a></li>
|
| - <li><a href="#documentation">Documentation</a></li>
|
| - <li><a href="#examples">Examples</a></li>
|
| - <li><a href="#internal-tools-and-scripts">Internal tools and scripts</a></li>
|
| -</ol>
|
| -
|
| -<p>Part of a healthy code ecosystem is consistent conventions. When we all do the
|
| -same thing the same way, it makes it easier for us to learn our way around
|
| -each other’s work. It also makes it easier to write tools that can automatically
|
| -do stuff for us.</p>
|
| -
|
| -<p>When you build a Pub package, we have a set of conventions we encourage you to
|
| -follow. They describe how you organize the files and directories within your
|
| -package, and how to name things. You don’t have to have every single thing
|
| -these guidelines specify. If your package doesn’t have binaries, it doesn’t
|
| -need a directory for them. But if it does, you’ll make everyone’s life easier
|
| -if you call it <code>bin</code>.</p>
|
| -
|
| -<p>To give you a picture of the whole enchilada, here’s what a complete package
|
| -(conveniently named <code>enchilada</code>) that uses every corner of these guidelines
|
| -would look like:</p>
|
| -
|
| -<pre><code>enchilada/
|
| - pubspec.yaml
|
| - pubspec.lock *
|
| - README.md
|
| - LICENSE
|
| - asset/
|
| - guacamole.css
|
| - benchmark/
|
| - make_lunch.dart
|
| - packages/ **
|
| - bin/
|
| - enchilada
|
| - packages/ **
|
| - doc/
|
| - getting_started.md
|
| - example/
|
| - lunch.dart
|
| - packages/ **
|
| - lib/
|
| - enchilada.dart
|
| - tortilla.dart
|
| - src/
|
| - beans.dart
|
| - queso.dart
|
| - packages/ **
|
| - test/
|
| - enchilada_test.dart
|
| - tortilla_test.dart
|
| - packages/ **
|
| - tool/
|
| - generate_docs.dart
|
| - web/
|
| - index.html
|
| - main.dart
|
| - style.css
|
| -</code></pre>
|
| -
|
| -<p>* The <code>pubspec.lock</code> will only be in source control if the package is an
|
| -<a href="glossary.html#application-package">application package</a>.</p>
|
| -
|
| -<p>** The <code>packages</code> directories will exist locally after you’re run
|
| -<code>pub get</code>, but won’t be checked into source control.</p>
|
| -
|
| -<h2 id="the-basics">The basics</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - pubspec.yaml
|
| - pubspec.lock
|
| -</code></pre>
|
| -
|
| -<div class="learn-more">
|
| - <a href="/doc/pubspec.html">
|
| - Learn more about pubspecs →
|
| - </a>
|
| -</div>
|
| -
|
| -<p>Every package will have a <a href="pubspec.html"><strong>pubspec</strong></a>, a file named
|
| -<code>pubspec.yaml</code>, in the root directory of the package. That’s what <em>makes</em> it a
|
| -package.</p>
|
| -
|
| -<p>Once you’ve run <a href="pub-get.html"><code>pub get</code></a> or <a href="pub-upgrade.html"><code>pub
|
| -upgrade</code></a> on the package, you will also have a <strong>lockfile</strong>,
|
| -named <code>pubspec.lock</code>. If your package is an <a href="glossary.html#application-package">application
|
| -package</a>, this will be checked into source
|
| -control. Otherwise, it won’t be.</p>
|
| -
|
| -<pre><code>enchilada/
|
| - packages/
|
| - ...
|
| -</code></pre>
|
| -
|
| -<p>Running pub will also generate a <code>packages</code> directory. You will <em>not</em> check
|
| -this into source control, and you won’t need to worry too much about its
|
| -contents. Consider it pub magic, but not scary magic.</p>
|
| -
|
| -<p>The open source community has a few other files that commonly appear at the top
|
| -level of a project: <code>LICENSE</code>, <code>AUTHORS</code>, etc. If you use any of those, they can
|
| -go in the top level of the package too.</p>
|
| -
|
| -<h2 id="readme">README</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - README.md
|
| -</code></pre>
|
| -
|
| -<p>One file that’s very common in open source is a README file that
|
| -describes the project. This is especially important in pub. When you upload
|
| -to <a href="/">pub.dartlang.org</a>, your README will be shown on the page for your
|
| -package. This is the perfect place to introduce people to your code.</p>
|
| -
|
| -<p>If your README ends in <code>.md</code>, <code>.markdown</code>, or <code>.mdown</code>, it will be parsed as
|
| -<a href="http://daringfireball.net/projects/markdown/">Markdown</a> so you can make it as fancy as you like.</p>
|
| -
|
| -<h2 id="public-libraries">Public libraries</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - lib/
|
| - enchilada.dart
|
| - tortilla.dart
|
| -</code></pre>
|
| -
|
| -<p>Many packages are <a href="glossary.html#library-package"><em>library packages</em></a>: they
|
| -define Dart libraries that other packages can import and use. These public Dart
|
| -library files go inside a directory called <code>lib</code>.</p>
|
| -
|
| -<p>Most packages define a single library that users can import. In that case,
|
| -its name should usually be the same as the name of the package, like
|
| -<code>enchilada.dart</code> in the example here. But you can also define other libraries
|
| -with whatever names make sense for your package.</p>
|
| -
|
| -<p>When you do, users can import these libraries using the name of the package and
|
| -the library file, like so:</p>
|
| -
|
| -<div class="highlight"><pre><code class="dart"><span class="k">import</span> <span class="s2">"package:enchilada/enchilada.dart"</span><span class="p">;</span>
|
| -<span class="k">import</span> <span class="s2">"package:enchilada/tortilla.dart"</span><span class="p">;</span>
|
| -</code></pre></div>
|
| -
|
| -<p>If you feel the need to organize your public libraries, you can also create
|
| -subdirectories inside <code>lib</code>. If you do that, users will specify that path when
|
| -they import it. Say you have a file hierarchy like this:</p>
|
| -
|
| -<pre><code>enchilada/
|
| - lib/
|
| - some/
|
| - path/
|
| - olives.dart
|
| -</code></pre>
|
| -
|
| -<p>Users will import <code>olives.dart</code> like:</p>
|
| -
|
| -<div class="highlight"><pre><code class="dart"><span class="k">import</span> <span class="s2">"package:enchilada/some/path/olives.dart"</span><span class="p">;</span>
|
| -</code></pre></div>
|
| -
|
| -<p>Note that only <em>libraries</em> should be in <code>lib</code>. <em>Entrypoints</em>—Dart scripts
|
| -with a <code>main()</code> function—cannot go in <code>lib</code>. If you place a Dart script
|
| -inside <code>lib</code>, you will discover that any <code>package:</code> imports it contains don’t
|
| -resolve. Instead, your entrypoints should go in the appropriate
|
| -<a href="glossary.html#entrypoint-directory">entrypoint directory</a>.</p>
|
| -
|
| -<h2 id="public-assets">Public assets</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - asset/
|
| - guacamole.css
|
| -</code></pre>
|
| -
|
| -<p>While most library packages exist to let you reuse Dart code, you can also
|
| -reuse other kinds of content. For example, a package for something like
|
| -<a href="http://getbootstrap.com/">Bootstrap</a> might include a number of CSS files for
|
| -consumers of the package to use.</p>
|
| -
|
| -<p>These go in a top-level directory named <code>asset</code>. You can put any kind of file
|
| -in there and organize it with subdirectories however you like. It’s effectively
|
| -a <code>lib</code> directory for stuff that isn’t Dart code.</p>
|
| -
|
| -<p>Users can reference another package’s assets using URLs that contain
|
| -<code>assets/<package>/<path></code> where <code><package></code> is the name of the package
|
| -containing the asset and <code><path></code> is the relative path to the asset within that
|
| -package’s <code>asset</code> directory.</p>
|
| -
|
| -<aside class="alert alert-warning">
|
| -
|
| -<p>The mechanics of referencing assets are still being implemented. URLs that
|
| -contain <tt>assets/</tt> are handled by <a href="pub-serve.html"><tt>pub
|
| -serve</tt></a>.</p>
|
| -
|
| -<p>The <a href="pub-build.html"><tt>pub build</tt></a> command also copies
|
| -assets to an <tt>assets</tt> directory, but this will <em>only</em> be in the
|
| -root directory of the output, so you must make sure that your <tt>assets/</tt>
|
| -URL correctly resolves to that directory and not a subdirectory.</p>
|
| -
|
| -<p>We don't currently have a solution for referencing assets in command-line
|
| -Dart applications.</p>
|
| -
|
| -</aside>
|
| -
|
| -<p>Note that <code>assets</code> is plural in the URL. This is a bit like the split between
|
| -<code>lib</code> and <code>packages</code>. The former is the name of the <em>directory in the package</em>,
|
| -the latter is the <em>name you use to reference it</em>.</p>
|
| -
|
| -<p>For example, let’s say your package wanted to use enchilada’s <code>guacamole.css</code>
|
| -styles. In an HTML file in your package, you can add:</p>
|
| -
|
| -<div class="highlight"><pre><code class="html"><span class="nt"><link</span> <span class="na">href=</span><span class="s">"assets/enchilada/guacamole.css"</span> <span class="na">rel=</span><span class="s">"stylesheet"</span><span class="nt">></span>
|
| -</code></pre></div>
|
| -
|
| -<p>When you run your application using <a href="pub-serve.html"><code>pub serve</code></a>, or build it
|
| -to something deployable using <a href="pub-build.html"><code>pub build</code></a>, Pub will copy over
|
| -any referenced assets that your package depends on.</p>
|
| -
|
| -<h2 id="implementation-files">Implementation files</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - lib/
|
| - src/
|
| - beans.dart
|
| - queso.dart
|
| -</code></pre>
|
| -
|
| -<p>The libraries inside “lib” are publicly visible: other packages are free to
|
| -import them. But much of a package’s code is internal implementation libraries
|
| -that should only be imported and used by the package itself. Those go inside a
|
| -subdirectory of <code>lib</code> called <code>src</code>. You can create subdirectories in there if
|
| -it helps you organize things.</p>
|
| -
|
| -<p>You are free to import libraries that live in <code>lib/src</code> from within other Dart
|
| -code in the <em>same</em> package (like other libraries in <code>lib</code>, scripts in <code>bin</code>, and
|
| -tests) but you should never import from another package’s <code>lib/src</code> directory.
|
| -Those files are not part of the package’s public API, and they might change in
|
| -ways that could break your code.</p>
|
| -
|
| -<p>When you use libraries from within your own package, even stuff in <code>src</code>, you
|
| -can (and should) still use <code>"package:"</code> to import them. This is perfectly
|
| -legit:</p>
|
| -
|
| -<div class="highlight"><pre><code class="dart"><span class="k">import</span> <span class="s2">"package:enchilada/src/beans.dart"</span><span class="p">;</span>
|
| -</code></pre></div>
|
| -
|
| -<p>The name you use here (in this case <code>enchilada</code>) is the name you specify for
|
| -your package in its <a href="pubspec.html">pubspec</a>.</p>
|
| -
|
| -<h2 id="web-files">Web files</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - web/
|
| - index.html
|
| - main.dart
|
| - style.css
|
| -</code></pre>
|
| -
|
| -<p>Dart is a web language, so many pub packages will be doing web stuff. That
|
| -means HTML, CSS, images, and, heck, probably even some JavaScript. All of that
|
| -goes into your package’s <code>web</code> directory. You’re free to organize the contents
|
| -of that to your heart’s content. Go crazy with subdirectories if that makes you
|
| -happy.</p>
|
| -
|
| -<p>Also, and this is important, any Dart web entrypoints (in other words, Dart
|
| -scripts that are referred to in a <code><script></code> tag) go under <code>web</code> and not <code>lib</code>.
|
| -That ensures that there is a nearby <code>packages</code> directory so that <code>package:</code>
|
| -imports can be resolved correctly.</p>
|
| -
|
| -<p>(You may be asking yourself, “Self, where should I put my web-based example
|
| -programs? <code>example</code> or <code>web</code>?” Put those in <code>example</code>.)</p>
|
| -
|
| -<h2 id="command-line-apps">Command-line apps</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - bin/
|
| - enchilada
|
| -</code></pre>
|
| -
|
| -<p>Some packages define programs that can be run directly from the command line.
|
| -These can be shell scripts or any other scripting language, including Dart.
|
| -The <code>pub</code> application itself is one example: it’s a simple shell script that
|
| -invokes <code>pub.dart</code>.</p>
|
| -
|
| -<p>If your package defines stuff like this, put it in a directory named <code>bin</code>.</p>
|
| -
|
| -<aside class="alert alert-note">
|
| -
|
| -At some point, pub will support automatically adding that directory to your
|
| -system path so that these scripts can be easily invoked.
|
| -
|
| -</aside>
|
| -
|
| -<h2 id="tests-and-benchmarks">Tests and benchmarks</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - test/
|
| - enchilada_test.dart
|
| - tortilla_test.dart
|
| -</code></pre>
|
| -
|
| -<p>Every self-respecting package should have tests. With pub, the convention is
|
| -that these go in a <code>test</code> directory (or some directory inside it if you like)
|
| -and have <code>_test</code> at the end of their file names.</p>
|
| -
|
| -<p>Typically, these use the <a href="http://api.dartlang.org/unittest.html">unittest</a>
|
| -package but you can use whatever testing system that gets you excited.</p>
|
| -
|
| -<pre><code>enchilada/
|
| - benchmark/
|
| - make_lunch.dart
|
| -</code></pre>
|
| -
|
| -<p>Packages that have performance critical code may also include <em>benchmarks</em>.
|
| -These test the API not for correctness but for speed (or memory use, or maybe
|
| -other empirical metrics).</p>
|
| -
|
| -<h2 id="documentation">Documentation</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - doc/
|
| - getting_started.md
|
| -</code></pre>
|
| -
|
| -<p>If you’ve got code and tests, the next piece you need to maximize your karma
|
| -is good documentation. That goes inside a directory named <code>doc</code>. We don’t
|
| -currently have any guidelines about format or organization within that. Use
|
| -whatever markup format you like and be happy that you’re actually writing docs.</p>
|
| -
|
| -<p>This directory should <em>not</em> just contain docs generated automatically from your
|
| -source code using
|
| -<a href="http://api.dartlang.org/docs/continuous/dartdoc.html">dartdoc</a>. Since that’s
|
| -pulled directly from the code already in the package, putting those docs in
|
| -here would be redundant. Instead, this is for tutorials, guides, and other
|
| -hand-authored documentation <em>in addition to</em> generated API references.</p>
|
| -
|
| -<h2 id="examples">Examples</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - example/
|
| - lunch.dart
|
| -</code></pre>
|
| -
|
| -<p>At this point, you’re going for the brass ring. Code, tests, docs, what else
|
| -could your users want? Standalone example programs that use your package, of
|
| -course! Those go inside the <code>example</code> directory. If the examples are complex
|
| -and use multiple files, consider making a directory for each example. Otherwise,
|
| -you can place each one right inside <code>example</code>.</p>
|
| -
|
| -<p>This is an important place to consider using <code>package:</code> to import files from
|
| -your own package. That ensures the example code in your package looks exactly
|
| -like code outside of your package would look.</p>
|
| -
|
| -<h2 id="internal-tools-and-scripts">Internal tools and scripts</h2>
|
| -
|
| -<pre><code>enchilada/
|
| - tool/
|
| - generate_docs.dart
|
| -</code></pre>
|
| -
|
| -<p>Mature packages often have little helper scripts and programs that people
|
| -run while developing the package itself. Think things like test runners,
|
| -documentation generators, or other bits of automation.</p>
|
| -
|
| -<p>Unlike the scripts in <code>bin</code>, these are <em>not</em> for external users of the package.
|
| -If you have any of these, place them in a directory called <code>tool</code>.</p>
|
|
|