Использование агрегатов Монго в Метеоре

#typescript #meteor #ecmascript-6

Вопрос:

Мне нужно использовать $lookup оператора Монго, чтобы добавить некоторые связанные данные в коллекцию метеоритов, поэтому я установил tunguska:reactive-aggregate пакет из AtmosphereJs (https://atmospherejs.com/tunguska/reactive-aggregate). Следуя его документации, вот как я его использую:

 import { ReactiveAggregate } from 'meteor/tunguska:reactive-aggregate';

Meteor.publish("orders", function () {
  ReactiveAggregate(this, OrdersCollection, [{
    $lookup: {
      from: "customers",
      localField: "customer_id",
      foreignField: "wooCommerce_id",
      as: "customerInfo"
    }
  }]);
})
 

Это работает, и я получаю информацию о клиенте в customerInfo области сбора. Однако компилятор Typescript жалуется на эту ошибку:

error TS2307: Cannot find module "meteor/tunguska:reactive-aggregate"

Есть ли какой-нибудь способ исправить эту ошибку? Я думаю, что это вопрос добавления этого пакета в список «обнаруженных», как, например, при импорте meteor/check , но я не знаю, как это сделать. Приложение работает так, как ожидалось, но мне не нравится отмечать файлы в среде IDE, когда ошибок быть не должно…

Спасибо!

Комментарии:

1. Typescript ищет файл типизации, вы, вероятно, можете создать его вручную

2. Привет, я думаю, что проблема в том, что, помимо отсутствия типов, он не может найти ни одного модуля с таким именем ни в одной папке, контролируемой компилятором. Я проверил как местный npm_modules , так и метеоритный ( .meteor/local/build/programs/server/npm/node_modules ) и ничего не смог найти о посылке…

3. Пакетов Meteor в node_modules каталоге нет. Вам нужно проверить .meteor/packages имя пакета или запустить meteor add tunguska:reactive-aggregate , чтобы убедиться, что пакет присутствует. Также вам следует запустить проект Meteor с помощью Meteor meteor run .

Ответ №1:

Изучив структуру папок проекта Meteor, я думаю, что понимаю, что происходит:

  • Как объяснено в комментариях выше, пакеты Meteor находятся не внутри node_modules , а внутри .meteor/local/build/programs/server/packages . Похоже, что Meteor объединяет эти пакеты при компиляции приложения, поэтому он работает, когда вы импортируете и используете некоторые из них, например:
 import { ReactiveAggregate } from 'meteor/tunguska:reactive-aggregate';

Meteor.publish("orders", function () {
  ReactiveAggregate(this, OrdersCollection, [{
     ...
  }]);
});
 

Единственная проблема с этим заключается в том, что IDE жалуется, что не может найти модуль, поэтому, чтобы исправить это, нам нужно добавить файл типов. Поскольку их нет, я постараюсь создать один, когда у меня будет больше свободного времени.

Ваше здоровье!