This package is now called anti:modules.
A comprehensive module manager designed for meteor.
meteor add anti:modules
Layers are used for incremental loading of your app source code. To use them first add .module.js and .module.html extensions to selected files and put them in a folder called layers. It should be visible for both server and client. For example:
myMeteorApp
client
regularFile.js
...
server
layers
layer1
file1.module.js
file2.module.html
layer2
file3.module.js
file4.module.html
The layers will not be included with client side source code at first. To use them, you will first need to declare that you want to have an instance of the $global module:
myApp = Module('$global').as('myApp');Once it's done, you can require each layer at anytime:
myApp.require('layer1', function () {
console.log('layer1 is now ready to use');
});Briefly speaking, you can divide your app into any number of independent modules. Modules are useful, because they provide namespacing for some global objects like templates, helpers, collections and routes. Also, a single module may be instantiated multiple times with different configuration. Additionally, each module may consist of multiple source code layers which may be loaded on demand, only when they're needed.
Only files with .module.js and .module.html extensions counts as module building blocks. There are several ways to tell what module a particular file belongs to. If your project structure looks more or less like this:
myMeteorApp
modules
module1.module.js
module2
file1.module.js
file2.module.js
client
modules
module1
file3.module.js
file4.module.html
module2
file5.module.js
In the above example there are two modules: module1 and module2. The first one consists of three files:
modules/module1.module.js
client/modules/module1/file3.module.js
client/modules/module1/file4.module.html
and the second one:
modules/module2/file1.module.js
modules/module2/file2.module.js
client/modules/module2/file5.module.js
If you're a package author, then you can specify the module name by passing module property along with options argument for addFiles routine.
In any of the module files there is a special global variable - an UpperCamelCase version of your module name - which represents a module instance. Anything you do with this variable will be reflected to each module instance you will ever decide to create. For example:
// modules/module1.module.js
Module1.version = "1.0.0";will result in adding version property to every instance of module1. Additionally the global Template object is replaced by a sandboxed version. So within a .module.js file belonging to module1 the Template will only contain templates which were defined for this particular module.
You can create as many instances of existing modules as you want as long as you make sure that the names of your instances are globally unique.
instance1 = Module('module1').as('instance1');
instance2 = Module('module1').as('instance2');
instance3 = Module('module1').as('instance2'); // this will throw an error