javascript - Creating Meteor package library? -


i'm wanting create "core" package , "module/plugin" packages accounts-facebook uses accounts-base in meteor.

here's have it's not working:

packages/project:modules-core/package.js:

package.describe({   name: 'project:modules-core',     summary: 'core package modules.',     version: '1.0.0' });  package.onuse(function (api) {     api.versionsfrom('meteor@0.9.1.1');      api.addfiles('lib/core.js', ['client', 'server']);      if (api.export) {         api.export('hbmodule');     } }); 

packages/project:modules-core/lib/core.js:

hbmodule = (function () {   var modulename = "";    var getsharecount = (function (url) {    });    var register = (function (name) {     hbmodule[name] = name;   }); }()); 

packages/project:facebook/package.js:

package.describe({   name: 'project:facebook',     summary: 'facebook module.',     version: '1.0.0' });  package.onuse(function(api) {     api.versionsfrom('meteor@0.9.1.1');      api.use('project:modules-core', ['client', 'server']);      api.imply('project:modules-core', ['client', 'server']);      api.addfiles('lib/facebook.js', ['client', 'server']); }); 

packages/project:facebook/lib/facebook.js:

facebook = (function () {   var modulename = "facebook";    var getsharecount = (function (url) {      return 22;   }); }());  hbmodule.register('facebook'); 

and i'm getting typeerror: cannot read property 'register' of undefined error.

what doing wrong?

thanks!

the iifes (immediately-invoked function expressions) aren't returning anything, hbmodule , facebook both undefined. when creating hbmodule, need return object register property set register function.

hbmodule = (function () {   var modulename = "";    var getsharecount = (function (url) {    });    var register = (function (name) {     hbmodule[name] = name;   });    // return object assigned hbmodule   return { register: register }; }()); 

also iife's unnecessary here, meteor wrap each file anyway, , expose variables use without declaring (such hbmodule); variables declared var scoped file.

packages/project:modules-core/lib/core.js:

hbmodule = {}; var modulename = '';  // assuming want expose getsharecount method well? hbmodule.getsharecount = function (url) {  };  hbmodule.register = function (name) {   hbmodule[name] = name; }; 

packages/project:facebook/lib/facebook.js:

facebook = {}; var modulename = 'facebook';  facebook.getsharecount = function (url) {   return 22; };  hbmodule.register('facebook'); 

Comments