OLD | NEW |
| (Empty) |
1 --- | |
2 title: "Pubspec Format" | |
3 --- | |
4 | |
5 1. [Name](#name) | |
6 1. [Version](#version) | |
7 1. [Description](#description) | |
8 1. [Author/Authors](#authorauthors) | |
9 1. [Homepage](#homepage) | |
10 1. [Documentation](#documentation) | |
11 1. [Dependencies](#dependencies) | |
12 1. [SDK constraints](#sdk-constraints) | |
13 {:.toc} | |
14 | |
15 Every pub package needs some metadata so it can specify its | |
16 [dependencies](glossary.html#dependency). Pub packages that are shared with | |
17 others also need to provide some other information so users can discover them. | |
18 Pub stores this in a file named `pubspec.yaml`, which (naturally) is written in | |
19 the [YAML](http://www.yaml.org/) language. | |
20 | |
21 At the top level are a series of fields. The currently supported ones are: | |
22 | |
23 <dl class="dl-horizontal"> | |
24 <dt>Name</dt> | |
25 <dd>Required for every package.</dd> | |
26 <dt>Version</dt> | |
27 <dd>Required for packages that will be hosted on pub.dartlang.org.</dd> | |
28 <dt>Description</dt> | |
29 <dd>Required for packages that will be hosted on pub.dartlang.org.</dd> | |
30 <dt>Author/Authors</dt> | |
31 <dd>Optional.</dd> | |
32 <dt>Homepage</dt> | |
33 <dd>Optional.</dd> | |
34 <dt>Documentation</dt> | |
35 <dd>Optional.</dd> | |
36 <dt>Dependencies</dt> | |
37 <dd>Can be omitted if your package has no dependencies.</dd> | |
38 <dt>Dev dependencies</dt> | |
39 <dd>Can be omitted if your package has no dev dependencies.</dd> | |
40 </dl> | |
41 | |
42 All other fields will be ignored. A simple but complete pubspec looks something | |
43 like this: | |
44 | |
45 {% highlight yaml %} | |
46 name: newtify | |
47 version: 1.2.3 | |
48 description: > | |
49 Have you been turned into a newt? Would you like to be? This | |
50 package can help: it has all of the newt-transmogrification | |
51 functionality you've been looking for. | |
52 author: Nathan Weizenbaum <nweiz@google.com> | |
53 homepage: http://newtify.dartlang.org | |
54 documentation: http://docs.newtify.com | |
55 dependencies: | |
56 efts: '>=2.0.4 <3.0.0' | |
57 transmogrify: '>=0.4.0' | |
58 dev_dependencies: | |
59 unittest: '>=0.6.0' | |
60 {% endhighlight %} | |
61 | |
62 ## Name | |
63 | |
64 Every package needs a name. When your stellar code gets props on | |
65 the world stage, this is what they'll be hollering. Also, it's how other | |
66 packages will refer to yours, and how it will appear here, should you publish | |
67 it. | |
68 | |
69 It should be all lowercase, with underscores to separate words, | |
70 `just_like_this`. Stick with basic Latin letters and Arabic digits: | |
71 `[a-z0-9_]` and ensure that it's a valid Dart identifier (i.e. doesn't start | |
72 with digits and isn't a reserved word). | |
73 | |
74 Try to pick a name that is clear, terse, and not already in use. A quick search | |
75 [here](/packages) to make sure nothing else is using your name can save you | |
76 heartache later. | |
77 | |
78 ## Version | |
79 | |
80 Every package has a version. A version number is required to host your package | |
81 here, but can be omitted for local-only packages. If you omit it, your package | |
82 is implicitly versioned `0.0.0`. | |
83 | |
84 No one really gets excited about versioning, but it's a necessary evil for | |
85 reusing code while letting it evolve quickly. A version number is three numbers | |
86 separated by dots, like `0.2.43`. It can also optionally have a build | |
87 (`+hotfix.oopsie`) or pre-release (`-alpha.12`) suffix. | |
88 | |
89 Each time you publish your package, you will publish it at a specific version. | |
90 Once that's been done, consider it hermetically sealed: you can't touch it | |
91 anymore. To make more changes, you'll need a new version. | |
92 | |
93 When you select a version, follow [semantic versioning][]. When you do, the | |
94 clouds will part and sunshine will pour into your soul. If you don't, prepare | |
95 yourself for hordes of angry users. | |
96 | |
97 [semantic versioning]: http://semver.org | |
98 | |
99 ## Description | |
100 | |
101 This is optional for your own personal packages, but if you intend to share | |
102 your package with the world (and you should because, let's be honest with | |
103 ourselves, it's a thing of beauty) you must provide a description. This should | |
104 be relatively short—a few sentences, maybe a whole paragraph—and | |
105 tells a casual reader what they might want to know about your package. | |
106 | |
107 Think of the description as the sales pitch for your package. Users will see it | |
108 when they [browse for packages](/packages). It should be simple plain text: | |
109 no markdown or HTML. That's what your README is for. | |
110 | |
111 ## Author/Authors | |
112 | |
113 You're encouraged to use these fields to describe the author(s) of your package | |
114 and provide contact information. `author` should be used if your package has a | |
115 single author, while `authors` should be used with a YAML list if more than one | |
116 person wrote the package. Each author can either be a single name (e.g. `Nathan | |
117 Weizenbaum`) or a name and an email address (e.g. `Nathan Weizenbaum | |
118 <nweiz@google.com>`). For example: | |
119 | |
120 {% highlight yaml %} | |
121 authors: | |
122 - Nathan Weizenbaum <nweiz@google.com> | |
123 - Bob Nystrom <rnystrom@google.com> | |
124 {% endhighlight %} | |
125 | |
126 If anyone uploads your package here, we will show this email address so make | |
127 sure you're OK with that. | |
128 | |
129 ## Homepage | |
130 | |
131 This should be a URL pointing to the website for your package. For | |
132 [hosted packages](#hosted-packages), this URL will be linked from the | |
133 package's page. While this is technically optional *please do* provide one. It | |
134 helps users understand where your package is coming from. If nothing else, you | |
135 can always use the URL where you host the source code: | |
136 [GitHub](http://github.com), [code.google.com](http://code.google.com/), | |
137 whatever. | |
138 | |
139 ## Documentation | |
140 | |
141 Some packages may have a site that hosts documentation separate from the main | |
142 homepage. If your package has that, you can also add a `documentation:` field | |
143 with that URL. If provided, a link to it will be shown on your package's page. | |
144 | |
145 ## Dependencies | |
146 | |
147 <div class="learn-more"> | |
148 <a href="/doc/dependencies.html"> | |
149 Learn more about dependencies → | |
150 </a> | |
151 </div> | |
152 | |
153 Finally, the pubspec's *raison d'ĂȘtre*: [dependencies](glossary.html#dependency)
. Here, | |
154 you list each package that your package needs in order to work. | |
155 | |
156 There are two separate sections. Dependencies under `dependencies:` are | |
157 "regular" dependencies. They are packages that anyone using your package will | |
158 also need. Dependencies under `dev_dependencies` are | |
159 [dev dependencies](glossary.html#dev-dependency). These are packages that are | |
160 only needed in the development of your package itself. | |
161 | |
162 ## SDK constraints | |
163 | |
164 A package can indicate which versions of its dependencies it supports, but there | |
165 is also another implicit dependency all packages have: the Dart SDK itself. | |
166 Since the Dart platform evolves over time, a package may only work with certain | |
167 versions of it. | |
168 | |
169 A package can specify that using an *SDK constraint*. This goes inside a | |
170 separate top-level "environment" field in the pubspec and uses the same | |
171 [version constraint](dependencies.html#version-constraints) syntax as | |
172 dependencies. For example, this constraint says that this package works with any | |
173 Dart SDK from 0.3.4 or later: | |
174 | |
175 {% highlight yaml %} | |
176 environment: | |
177 sdk: ">=0.3.4" | |
178 {% endhighlight %} | |
179 | |
180 Pub will try to find the latest version of a package whose SDK constraint works | |
181 with the version of the Dart SDK that you have installed. | |
182 | |
183 [pubsite]: http://pub.dartlang.org | |
184 [semantic versioning]: http://semver.org/ | |
OLD | NEW |