提交 420d715e 编写于 作者: H Hixie

Specs: Module overview

Review URL: https://codereview.chromium.org/678803002
上级 2a491514
Sky module system
=================
This document describes the Sky module system.
Overview
--------
The Sky module system is based on the ```import``` element. In its
most basic form, you import a module as follows:
```html
<import src="path/to/module.sky" />
```
As these ```import``` elements are inserted into a document, the
document's list of outstanding dependencies grows. When an imported
module completes, it is removed from the document's list of
outstanding dependencies.
Before executing any ```script``` elements, the parser waits until the
list of outstanding dependencies is empty. After the parser has
finished parsing, the document waits until its list of outstanding
dependencies is empty before the module it represents is marked
complete.
Module API
----------
Within a script in a module, the ```module``` identifier is bound to
the ```Module``` object that represents the module:
```
interface Module : EventTarget {
constructor (Application application, Document document); // O(1)
attribute any exports; // O(1) // defaults to the module's document
readonly attribute Document document; // O(1) // the module's document
readonly attribute Application application; // O(1)
}
```
### Exporting values ###
A module can export a value by assigning the ```exports``` property of
its ```Module``` object. By default, the ```exports``` property of a
```Module``` is its ```Document``` object, so that a script-less
import is still useful (it exposes its contents, e.g. templates that
the import might have been written to provide).
Naming modules
--------------
The ```as``` attribute on the ```import``` element binds a name to the
imported module:
```html
<import src="path/to/chocolate.sky" as="chocolate" />
```
The parser executes the contents of script elements inside a module as
if they were executed as follow:
```javascript
(new Function(module, name_1, ..., name_n, source_code)).call(
source_module, value_1, ..., value_n);
```
Where ```name_1``` through ```name_n``` are the names bound to the
various named imports in the script element's document,
```source_code``` is the text content of the script element,
```source_module`` is the ```Module``` object of the script element's
module, and ```value_1``` through ```value_n``` are the values
exported by the various named imports in the script element's
document.
When an import fails to load, the ```as``` name for the import gets
bound to ```undefined```.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册