2015-08-01 6 views
2

Я пытаюсь построить метеорный пакет в строгом режиме с coffeescript. Основная проблема заключается в использовании доли, как описано в coffeescript meteor package. Кажется, что я неправильно понял объяснение в ссылке, потому что я получаю следующее сообщение об ошибке:метеорный пакет с coffeescript (и наследование и строгий режим)

ReferenceError: __coffeescriptShare is not defined 

Упакованные хорошо работал в JavaScript. Я просто поставил определение NotificationCommon до 'использовать строгий'.

Цель

  • NotificationCommon, область применения пакета
  • NotificationClient и NotificationServer: сфера файл
  • Уведомление: экспорт

Это моя версия с CoffeeScript:

notification_common.coffee:

'use strict' 

class share.NotificationCommon 
    constructor: -> 
    @collection = new (Meteor.Collection)('notification') 

    @SUCCESS = 'success' 
    @ERROR = 'error' 
    @INFO = 'info' 
    @WARNING = 'warning' 

notification_client.coffee:

'use strict' 

class NotificationClient extends share.NotificationCommon 
    constructor = -> 
    self = @ 

    Meteor.subscribe 'user_notif' 
    toastr.options = positionClass: 'toast-bottom-full-width' 

    @collection.find({}).observe 'added': (notif) -> 
     self.notify notif 
     return 

    notify = (notif) -> 
    toastr[notif.type] notif.message, notif.title, notif.options 
    @collection.update { _id: notif._id }, $set: notified: true 
    return 

Notification = new NotificationClient 

notification_server.coffee:

'use strict' 

class NotificationServer extends share.NotificationCommon 
    constructor = -> 
    self = @ 

    @collection.allow update: (userId, doc, fields, modifier) -> 
      return doc.userId is userId 

    Meteor.publish 'user_notif', -> 
     if @userId 
     return self.collection.find(userId: @userId, notified: false) 
     return 

    notify = (user_id, notif) -> 
    self = @ 
    checkType = Match.Where((x) -> 
     check x, String 
     check x, Match.OneOf('success', 'error', 'info', 'warning') 
     true 
    ) 
    check notif, 
     type: checkType 
     message: String 
     title: Match.Optional(String) 
     options: Match.Optional(Match.Any) 
     context: Match.Optional(Match.Any) 
    if user_id isnt null 
     if not Meteor.users.findOne(_id: user_id) 
     throw new (Meteor.Error)('User id not found.') 
     notif.userId = user_id 
    notif.notified = false 
    self.collection.insert notif 
    return 

Notification = new NotificationServer 

и package.js:

Package.describe({ 
    name: 'my:notification', 
    version: '0.0.1', 
    summary: 'User and system wide notification', 
    git: '', 
    documentation: 'README.md' 
}); 

Package.onUse(function(api) { 
    api.versionsFrom('1.1.0.2'); 

    api.use(['coffeescript','jquery']); 
    api.use('chrismbeckett:toastr'); 

    api.export('Notification'); 

    api.addFiles('notification_common.coffee'); 
    api.addFiles('notification_server.coffee','server'); 
    api.addFiles('notification_client.coffee','client'); 

}); 

Package.onTest(function(api) { 
    api.use(['tinytest','coffeescript']); 
    api.use('my:notification'); 
    api.addFiles('notification-tests.js'); 
}); 

Любая помощь будет оценена.

ответ

1

Решение добавить пакет fds:coffeescript-share в package.js:

api.use('fds:coffeescript-share'); 

увидеть ссылку для объяснения.

Было бы полезно, если бы объяснение пакета coffeescript бы описать проблему (связанную с использовать строгий) и сообщить о существовании вышеупомянутого пакета.

EDIT

@jorjordandan Спасибо за ваш комментарий. я можно сделать вывод о том, что на данный момент не существует полное решение для объединения

  • пакет метеора
  • CoffeeScript
  • строгий режим

РЕДАКТИРОВАТЬ 2

Я проанализировал глубже проблема, и я уверен, что нет никакого решения, которое можно найти внутри coffeescri pt упаковка.

Проблема должна быть решена командой метеоритов в коде здания упаковки. Я мог бы представить решение следующим образом. В API пакетов Meteor добавлена ​​новая инструкция: около экспорт другой названный что-то вроде scopePackage. Переменные, объявленные scopePackage, будут перечислены ниже /* Package-scope variables */ (в объединенных js). Но они не будут экспортироваться (код под /* Exports */ в конкатенированных js).

+0

В readme говорится, что пакет не предназначен для использования другими пакетами. Он добавляет: «fds: coffeescript-share делает тот же общий объект доступным для всего, что его использует. Это позволяет обходить все объекты, находящиеся за пределами их пакета. Это только проблема, когда fds: coffeescript-share используется другим пакетом». –

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

  • Нет связанных вопросов^_^