2015-03-13 1 views
0

Я использую конструкцию структуры, показанную на Meteor Meetup Antwerp Питере СуданМетеор пакета только подход, вызов функции пространства имен из другого пакета

Я имел успех, имея различные пространства имен имен (USERAUTH, AppRoute) в зависимости от функциональности мой модуль. Тем не менее, я хочу иметь специальное пространство приложений UP (UserPortal) и иметь пространства имен, такие как UP.UserAuth, UP.AppRoutes.

Я не могу назвать функцию в UP.UserAuth, которая проверяет вход в систему.

Мои вверх-приложение пакет package.js выглядит следующим образом

Package.describe({ 
    name: 'up-app', 
    version: '0.0.1',  
    summary: 'User Portal Application', 

}); 

var both=['server','client']; 
var server ='server'; 
var client ='client'; 

Package.onUse(function(api) { 
    api.versionsFrom('1.0.3.2'); 
    api.use('templating',client); 
    api.use('iron:[email protected]',both); 
    api.use('tracker',both); 
    api.use('underscore',both); 
    api.use('blaze',both); 

api.use(['up-user-auth'],both); 



    api.addFiles(['lib/namespace.js','lib/routes.js'],both); 

    api.addFiles(['views/dashboard.html','views/loading.html'],client); 


    api.export('UP'); 

}); 

Package.onTest(function(api) { 
    api.use('tinytest'); 
    api.use('up-app'); 
    api.addFiles('tests/up-app-tests.js'); 
}); 

я намерен использовать приложение, чтобы объявить все мои зависимости приложения в одном пакете.

Мой вверх-приложение/Библиотека/routes.js файл выглядит следующим образом:

Router.configure({ 
    layoutTemplate: 'upDashBoard', 
    loadingTemplate: 'upLoading' 
}); 

Router.onBeforeAction(UP.UserAuth.loginRequired, { 
    except: ['login','install'] 

}); 

Router.route('/', { 
    name: 'home' 
}); 

Мой вверх пользователем Auth пакет имеет это в его package.js

Package.describe({ 
    name: 'up-user-auth', 
    version: '0.0.1', 
    // Brief, one-line summary of the package. 
    summary: 'User Authentication and Roles Management', 

}); 

Package.onUse(function(api) { 
    var both = ['server', 'client']; 
    var server = 'server'; 
    var client = 'client'; 


    api.versionsFrom('1.0.3.2'); 

    api.use([ 
     'tracker', 
     'service-configuration', 
     'accounts-base', 
     'underscore', 
     'templating', 
     'blaze', 
     'session', 
     'sha', 
     ] 
     ,client); 

    api.use([ 
     'tracker', 
     'service-configuration', 
     'accounts-password', 
     'accounts-base', 
     'underscore',] 
     ,server); 

    api.use(['iron:[email protected]','copleykj:mesosphere'], both); 
    api.imply(['accounts-base','accounts-password'], both); 

    api.addFiles(['lib/namespace.js','lib/loginValidation.js','lib/loginMethods.js'],both); 


    api.export('UP', both); 

}); 

Package.onTest(function(api) { 
    api.use('tinytest'); 
    api.use('up-user-auth'); 
    api.addFiles('tests/server/up-user-auth-tests.js'); 
}); 

Мой вверх/Библиотека/namespace.js выглядит следующим образом:

UP={}; 
UP.UserAuth={ 
    loginRequired: function() { 
     return console.log("loginControllers"); 
    } 


} 

Если удалить вторую ссылку на UP={}; тогда я получаю сообщение об ошибке сказавНевозможно установить свойство «USERAUTH» неопределенной, но когда я добавляю все это я получаю Не удается прочитать свойство «loginRequired» неопределенной

Что я делаю не так?

ответ

0

ваш забыли объявить зависимость от вашего основного пакета «вверх-приложение». Каждый пакет, использующий пространство имен UP, должен объявлять зависимость от пакета, экспортирующего пространство имен.

Так, просто добавьте

api.use('up-app', ['client', 'server']); 

в до-пользователя-AUTH/package.js

Kr, Pieter

+0

Это приводит к ошибке циклической зависимости, так как до-приложение использует вверх user-auth для доступа к UP.UserAuth. – Churchill

Смежные вопросы