Meteor Package API Example
Context
In the past few days i was playing around with meteor framework, and was trying to install aloha editor. I realized that there was already an atmosphere package called aloha-meteor which allowed me to install it with meteorite: mrt add aloha-meteor.
The problem was that for some reason no translation files were included in this package, and i wanted to use it in pt-BR. So i forked the package and started doing some modifications, but got stuck pretty soon because i needed to use meteor's package api ( which is currently private ), and couldn't find its documentation anywhere. So i decided to document meteor's package api methods for future reference.
Package API
Most of this documentation was gathered looking at meteor's packages.js and other packages.
First of all, you need a file called 'package.js' inside of your package. Possible methods you can use there are: (by example)
Package.describe({
summary: "Package Description. Will appear with meteor list",
internal: false, // optional, will not show with meteor list if false
environments: ['client', 'server'] // optional. Supposedly specifies environments to load package, but i did not find any package that specifies this key.
});
Package.on_use(function (api, where){
// calls another package's on_use method
api.use('package name', 'client')
api.use('package name', ['client', 'server'])
api.use('package name', where || 'client')
// add file(s) with specified environment(s)
api.add_files('file_name.js', 'client');
api.add_files('file_name.js', ['client', 'server']);
api.add_files(['file_name.css', 'file_name.html'], 'client');
});
Package.on_test(function (api, where){
// same api methods as Package.on_use's callback function parameter
});
// used to describe a new extension file type
Package.register_extension("coffee", function (bundle, source_path, serve_path, where) {
// look at https://github.com/meteor/meteor/blob/master/packages/coffeescript/package.js for example
});
One of the problems that i run into when trying to create my aloha-editor package, is that by default it loads some of its javascript files asynchronously, and so it expects those js files to exist as static files. However, api.add_files does not add js files as static ones, rather it executes the file's contents. api.add_files only adds files as static ones ( which would equal as putting them in your app's public folder ) if there is no defined handler for the file's extension type.
Written by Stefano Diem Benatti
Related protips
1 Response
Did you figure out how to get some of those files to be loaded asynchronously?
Have a fresh tip? Share with Coderwall community!
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside