mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
133 lines
4.7 KiB
Markdown
133 lines
4.7 KiB
Markdown
{{#template name="apiPackagejs"}}
|
|
|
|
<h2 id="packagejs"><span>Package.js</span></h2>
|
|
|
|
{{#markdown}} A package is a directory containing a package.js file, which
|
|
contains roughly three major sections: a basic description, a package
|
|
definition, and a test definition. By default, the directory name is the name of
|
|
the package.
|
|
|
|
The `package.js` file below is an example of how to use the packaging API. The
|
|
rest of this section will explain the specific API commands in greater detail.
|
|
|
|
|
|
/* Information about this package */
|
|
Package.describe({
|
|
// Short two-sentence summary.
|
|
summary: "What this does",
|
|
// Version number.
|
|
version: "1.0.0",
|
|
// Optional. Default is package directory name.
|
|
name: "username:package-name",
|
|
// Optional github URL to your source repository.
|
|
git: "https://github.com/something/something.git",
|
|
});
|
|
|
|
/* This defines your actual package */
|
|
Package.onUse(function (api) {
|
|
// If no version is specified for an 'api.use' dependency, use the
|
|
// one defined in Meteor 0.9.0.
|
|
api.versionsFrom('0.9.0');
|
|
// Use Underscore package, but only on the server.
|
|
// Version not specified, so it will be as of Meteor 0.9.0.
|
|
api.use('underscore', 'server');
|
|
// Use iron:router package, version 1.0.0 or newer.
|
|
api.use('iron:router@1.0.0');
|
|
// Give users of this package access to the Templating package.
|
|
api.imply('templating')
|
|
// Export the object 'Email' to packages or apps that use this package.
|
|
api.export('Email', 'server');
|
|
// Specify the source code for the package.
|
|
api.addFiles('email.js', 'server');
|
|
});
|
|
|
|
/* This defines the tests for the package */
|
|
Package.onTest(function (api) {
|
|
// Sets up a dependency on this package
|
|
api.use('username:package-name');
|
|
// Allows you to use the 'tinytest' framework
|
|
api.use('tinytest@1.0.0');
|
|
// Specify the source code for the package tests
|
|
api.addFiles('email_tests.js', 'server');
|
|
});
|
|
|
|
/* This lets you use npm packages in your package*/
|
|
Npm.depends({
|
|
simplesmtp: "0.3.10",
|
|
"stream-buffers": "0.2.5"});
|
|
|
|
Build plugins are created with
|
|
[`Package.registerBuildPlugin`](#Package-registerBuildPlugin). See the
|
|
coffeescript package for an example. Build plugins are fully-fledged Meteor
|
|
programs in their own right and have their own namespace, package dependencies,
|
|
source files and npm requirements.
|
|
|
|
{{#note}}
|
|
You can use [local packages](#writingpackages) to define custom build plugins
|
|
for your app, with one caveat. In published packages, build plugins are already
|
|
bundled with their transitive dependencies. So if you want a dependency of a
|
|
build plugin to be satisfied by a local package, you must use a local copy of
|
|
the package that defines the plugin (even if you make no changes to that
|
|
package) so that Meteor will pick up the local dependency.
|
|
{{/note}}
|
|
|
|
<h3 id="packagedescription"><span>Package Description</span></h3>
|
|
|
|
Provide basic package information with `Package.describe(options)`. To publish a
|
|
package, you must define `summary` and `version`.
|
|
|
|
{{/markdown}}
|
|
|
|
{{> autoApiBox "Package.describe"}}
|
|
|
|
|
|
<h3 id="packagedefinition"><span>Package Definition</span></h3>
|
|
|
|
{{#markdown}}
|
|
Define dependencies and expose package methods with the
|
|
`Package.onUse` handler. This section lets you define what packages your package
|
|
depends on, what packages are implied by your package, and what object your
|
|
package is exported to.
|
|
{{/markdown}}
|
|
|
|
{{> autoApiBox "Package.onUse"}}
|
|
|
|
{{> autoApiBox "PackageAPI#versionsFrom" }}
|
|
{{> autoApiBox "PackageAPI#use" }}
|
|
{{> autoApiBox "PackageAPI#imply" }}
|
|
{{> autoApiBox "PackageAPI#export" }}
|
|
{{> autoApiBox "PackageAPI#addFiles" }}
|
|
{{> autoApiBox "PackageAPI#addAssets" }}
|
|
|
|
<h3 id="packagetests"><span>Unit Tests</span></h3>
|
|
|
|
{{#markdown}}
|
|
Set up your tests with the `Package.onTest` handler, which has an interface
|
|
that's parallel to that of the `onUse` handler. The tests will need to depend on
|
|
the package that you have just created. For example, if your package is the
|
|
`email` package, you have to call `api.use('email')` in order to test the
|
|
package.
|
|
|
|
If you used `meteor create` to set up your package, Meteor will create the
|
|
required scaffolding in `package.js`, and you'll only need to add unit test code
|
|
in the `_test.js` file that was created.
|
|
{{/markdown}}
|
|
|
|
{{> autoApiBox "Package.onTest"}}
|
|
|
|
|
|
<h3><span>External Packages and Plugins</span></h3>
|
|
|
|
{{#markdown}}
|
|
Meteor packages can include NPM packages and Cordova plugins by using
|
|
`Npm.depends` and `Cordova.depends` in the `package.js` file.
|
|
{{/markdown}}
|
|
|
|
{{> autoApiBox "Npm.depends"}}
|
|
{{> autoApiBox "Npm.require"}}
|
|
{{> autoApiBox "Cordova.depends"}}
|
|
{{> autoApiBox "Package.registerBuildPlugin"}}
|
|
{{> autoApiBox "Plugin.registerSourceHandler"}}
|
|
|
|
{{/template}}
|